use*_*775 28 php arrays sorting multidimensional-array
是否可以用于usort
对多维数组中的多个字段进行排序?例如,我想name
按字母顺序排序,然后从那些我想要排序的记录中排序age
.这可能用sort
吗?
Array (
[0] => Array (
[name] => Jonah
[age] => 27
)
[1] => Array (
[name] => Bianca
[age] => 32
)
)
Run Code Online (Sandbox Code Playgroud)
Tot*_*oto 74
怎么样:
$arr = Array (
0 => Array (
'name' => 'Jonah',
'age' => '27',
),
1 => Array (
'name' => 'Bianca',
'age' => '32',
),
2 => Array (
'name' => 'Jonah',
'age' => '25',
),
3 => Array (
'name' => 'Bianca',
'age' => '35',
),
);
function comp($a, $b) {
if ($a['name'] == $b['name']) {
return $a['age'] - $b['age'];
}
return strcmp($a['name'], $b['name']);
}
usort($arr, 'comp');
print_r($arr);
Run Code Online (Sandbox Code Playgroud)
输出:
Array
(
[0] => Array
(
[name] => Bianca
[age] => 32
)
[1] => Array
(
[name] => Bianca
[age] => 35
)
[2] => Array
(
[name] => Jonah
[age] => 25
)
[3] => Array
(
[name] => Jonah
[age] => 27
)
)
Run Code Online (Sandbox Code Playgroud)
Tim*_*per 36
usort($arr, function($a, $b)
{
$name = strcmp($a['name'], $b['name']);
if($name === 0)
{
return $a['age'] - $b['age'];
}
return $name;
});
Run Code Online (Sandbox Code Playgroud)
Guy*_*kes 12
怎么样:
<?php
function getRandomName() {
$possible = "ab";
$possible_len = strlen($possible);
$r = '';
for ($i = 0; $i < 4; $i++) {
$r .= substr($possible, mt_rand(0, $possible_len-1), 1);
}
return ucfirst($r);
}
$a = array();
for ($i = 0; $i < 10; $i++) {
$a[] = array('name' => getRandomName(), 'age' => rand(1,10), 'start_order' => $i);
}
$order = array('name' => 'desc', 'age' => 'asc');
print_r($a);
usort($a, function ($a, $b) use ($order) {
$t = array(true => -1, false => 1);
$r = true;
$k = 1;
foreach ($order as $key => $value) {
$k = ($value === 'asc') ? 1 : -1;
$r = ($a[$key] < $b[$key]);
if ($a[$key] !== $b[$key]) {
return $t[$r] * $k;
}
}
return $t[$r] * $k;
});
print_r($a);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
28911 次 |
最近记录: |