2013-09-19 4 views
0

У меня есть 3 массива, содержащих 3 части информации. Вероятно, проще показать вам, здесь:Расположите многомерный массив на 1 столбец

$dataPoints = array(
    array('1' => '33','2' => 'dave','3' => '367'), 
    array('1' => '168','2' => 'susan','3' => '56788'), 
    array('1' => '99','2' => 'tim','3' => '6') 

foreach ($dataPoints as $key => $row) { 
    $x[$key] = $row['1']; 
    $y[$key] = $row['2']; 
    $z[$key] = $row['3']; 
} 

$aaa = array_multisort($x, SORT_DESC, $y, SORT_ASC, $z, $dataPoints); 


print_r($aaa); 

Я пытаюсь сортировать самый низкий «3» значение (третий столбец), то выход все 3 ответов на этот массив.

Итак, «6» является самым низким на 3-й колонке. Затем выведите «99», «tim» & '6'.

Что я делаю неправильно?

+0

[Link] (http://stackoverflow.com/questions/1345307/php-retrieve-minimum-and-maximum-values-in-a -2d-ассоциативный массив) проверьте это – DS9

ответ

0

Согласно The docs, array_multisort возвращает TRUE или FALSE. Таким образом, ваш массив будет изменен напрямую.

Правильный код:

$dataPoints = array(
array('1' => '33','2' => 'dave','3' => '367'), 
array('1' => '168','2' => 'susan','3' => '56788'), 
array('1' => '99','2' => 'tim','3' => '6') 
); 

foreach ($dataPoints as $key => $row) { 
    $x[$key] = $row['1']; 
    $y[$key] = $row['2']; 
    $z[$key] = $row['3']; 
} 

$aaa = array_multisort($x, SORT_DESC, $y, SORT_ASC, $z, SORT_ASC, $dataPoints); 

print_r($aaa); //TRUE or FALSE 
print_r($dataPoints); //The data sorted 

отметить также, что вы сортировки по первому столбцу, затем второй, а затем третий (в случае связей). Если вы хотите отсортировать по третьей колонке первым, вы должны использовать это:

$aaa = array_multisort($z, SORT_ASC, $x, SORT_DESC, $y, SORT_ASC, $dataPoints); 
+0

Вверху, хотя prh недействителен, но print_r работает. – samg

+0

Ooops, извините, домашний метод print_r (быстрее написать: -D) – xurei

+0

Не забудьте отметить вопрос как ответ ;-) – xurei

0

Операция сортировки выполняется на inidivdual массивах ($ x, $ y, $ z). Если вы посмотрите на эти массивы, вы увидите, что они были отсортированы.

$aaa = true как это означает, что array_multisort был успешным.

0

Я считаю, что это то, что вы хотите, после usort, первая запись в $datapoints проведет запись, которую вы ищете, чтобы найти. Конечно, вы можете изменить функцию в usort, чтобы отсортировать, пожалуйста.

<?php 
$dataPoints = array(
array('1' => '33','2' => 'dave','3' => '367'), 
array('1' => '168','2' => 'susan','3' => '56788'), 
array('1' => '99','2' => 'tim','3' => '6') 
); 

usort($dataPoints, function($a, $b){ 
    if ($a[3] == $b[3]) { 
     return 0; 
    } 
    return ($a[3] < $b[3]) ? -1 : 1; 
}); 

print_r($dataPoints[0]); 

Вот ссылка на рабочий пример http://3v4l.org/XJU9t

Смежные вопросы