我有一个由数组组成的数组。我想通过子数组的属性对父数组进行排序。这是一个例子
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排序函数中的任何一种吗?
答案 0 :(得分:27)
您可以将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");
答案 1 :(得分:4)
对于类似数据库的数据库,请使用array_multisort,如示例#3中所示。
例如:
$sort = array();
foreach ($data as $key => $row) {
$sort[$key] = $row['basis'];
}
array_multisort($sort, SORT_ASC, $data);
其中$data
是您的数据数组,basis
是用于排序的元素。
答案 2 :(得分:0)
从PHP&gt; = 7.0开始,您可以将usort与太空船运营商结合使用
usort($arr, function ($a, $b) {
return $a[2] <=> $b[2];
});
答案 3 :(得分:-4)
请参阅此页面,例如
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
)
)