Мне составили массив массивов. Я хочу отсортировать родительский массив по свойству дочерних массивов. Вот пример
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");
см. Эту страницу, например
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
)
)