2010-04-20 2 views
14

У меня есть массив, состоящий из массивов. Я хочу сортировать родительский массив по свойству дочерних массивов. Вот примерСортировка массива по значению дочернего массива в PHP

array(2) { 
    [0]=> 
    array(3) { 
    [0]=> 
    string(6) "105945" 
    [1]=> 
    string(10) "First name" 
    [2]=> 
    float(0.080878465391) 
    } 
    [1]=> 
    array(3) { 
    [0]=> 
    string(6) "109145" 
    [1]=> 
    string(11) "Second name" 
    [2]=> 
    float(0.0504154818384) 
} 

Я хотел бы отсортировать родительский массив по [2] восходящему в дочерних массивах, так что в этом случае результат будет дочерние массивы негативов (.05, 08). Можно ли использовать любую из многочисленных функций сортировки PHP?

ответ

24

Вы можете использовать usort функции как:

$arr = array(
       array("105945","First name",0.080878465391), 
       array("109145","Second name",0.0504154818384) 
      ); 

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

usort($arr,"cmp"); 
+0

Пример №2 на этой странице очень похож на то, что вы пытаетесь сделать, взгляните на это. –

+0

Обновил мой ответ именно тем, что вы хотите. – codaddict

+0

Ничего себе, невероятно полезный ответ. Спасибо. – Evan

-2

видите эту страницу, например

http://php.net/manual/en/function.sort.php 

или пример

 <?php 
function multisort($array, $sort_by) { 
    foreach ($array as $key => $value) { 
     $evalstring = ''; 
     foreach ($sort_by as $sort_field) { 
      $tmp[$sort_field][$key] = $value[$sort_field]; 
      $evalstring .= '$tmp[\'' . $sort_field . '\'], '; 
     } 
    } 
    $evalstring .= '$array'; 
    $evalstring = 'array_multisort(' . $evalstring . ');'; 
    eval($evalstring); 

    return $array; 
} 

$test = array(
    array('a' => '1', 'b' => '3'), 
    array('a' => '2', 'b' => '1'), 
    array('a' => '1', 'b' => '1')); 

echo 'Unsorted: '; 
print_r($test); 

$result = multisort($test , array('a','b')); 

echo 'Sorted: '; 
print_r($result); 
?> 

Result: 

Unsorted: Array 
(
    [0] => Array 
     (
      [a] => 1 
      [b] => 3 
     ) 

    [1] => Array 
     (
      [a] => 2 
      [b] => 1 
     ) 

    [2] => Array 
     (
      [a] => 1 
      [b] => 1 
     ) 

) 
Sorted: Array 
(
    [0] => Array 
     (
      [a] => 1 
      [b] => 1 
     ) 

    [1] => Array 
     (
      [a] => 1 
      [b] => 3 
     ) 

    [2] => Array 
     (
      [a] => 2 
      [b] => 1 
     ) 

) 
+1

Это очень страшный код - я настоятельно рекомендую вам не использовать его. Используйте 'usort()', как рекомендовано. –

+0

Функция hey usort() уже предоставлена. Поэтому я предоставляю альтернативное решение, которое я предоставляю в качестве примера из руководства. – Karthik

4

Для базы данных как шаблоны использовать array_multisort, как показано в пример № 3.

Например:

$sort = array(); 
foreach ($data as $key => $row) { 
    $sort[$key] = $row['basis']; 
} 
array_multisort($sort, SORT_ASC, $data); 

где $data ваш массив данных и basis является элемент, используемый для сортировки.

+0

Фантастический! Спасибо, что поделился. – BarryMode

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