У меня есть массив, состоящий из массивов. Я хочу сортировать родительский массив по свойству дочерних массивов. Вот пример
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?
Вы можете использовать функцию 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");
Для баз данных, подобных шаблонам, используйте array_multisort, как показано в примере # 3.
Например:
$sort = array(); foreach ($data as $key => $row) { $sort[$key] = $row['basis']; } array_multisort($sort, SORT_ASC, $data);
где $data
– ваш массив данных, а basis
является элемент, используемый для сортировки.
см. эту страницу, например
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 ) )