我有一个需要按“是”和“否”键排序的数组 - 如何在PHP中完成?具体来说,我希望所有的是第一个索引(只有1个是,很多没有)
Array (
[0] => Array
(
[no] => Array
(
[0] => 379
)
[yes] => Array
(
[1] => 370
)
)
[1] => Array
(
[yes] => Array
(
[0] => 372
)
)
[2] => Array
(
[no] => Array
(
[0] => 377
)
[yes] => Array
(
[1] => 374
)
)
)
答案 0 :(得分:1)
您可以使用uksort
根据其键使用自定义比较函数对数组进行排序:
<?php
function yesfirst($a, $b) {
if ($a === 'yes') {
return -1;
} elseif ($b === 'yes') {
return 1;
} else {
return 0;
}
}
function uksort_yesfirst($ary) {
uksort($ary, 'yesfirst');
return $ary;
}
$array = array(
0 => array( no => array(0 => 379), yes => array(1 => 370)),
1 => array( yes => array( 0 => 372) ),
2 => array( no => array( 0 => 377), yes => array( 1 => 374))
);
$array = array_map('uksort_yesfirst', $array);
print_r($array);
?>
答案 1 :(得分:0)
$ar = array(
array(
'no' => array(0 => 379),
'yes' => array(1 => 370)
),
array(
'yes' => array(0 => 372)
),
array(
'no' => array(0 => 377),
'yes' => array(1 => 374)
)
);
usort($ar, function($a, $b){
$v_a = array_values($a['yes']);
$v_b = array_values($b['yes']);
if($v_a[0] == $v_b[0]){
return 0;
}
return $v_a[0] < $v_b[0] ? -1 : 1;
});
print_r($ar);
结果:
Array
(
[0] => Array
(
[no] => Array
(
[0] => 379
)
[yes] => Array
(
[1] => 370
)
)
[1] => Array
(
[yes] => Array
(
[0] => 372
)
)
[2] => Array
(
[no] => Array
(
[0] => 377
)
[yes] => Array
(
[1] => 374
)
)
)
答案 2 :(得分:0)
如果你的建议只是先显示'是'键,然后再显示'否'键,那么试试这个
function deep_krsort(&$arr) {
krsort($arr);
foreach ($arr as &$a) {
if (is_array($a) && !empty($a)) {
deep_krsort($a);
}
}
}
这将如何以相反的顺序改变你的内部深度元素