假设我有一个这样的数组
$array = array(
'abc' => true,
'def' => true,
'ghi' => true,
'jkl' => false
);
这是一个过于简化的示例,实际上这些值是状态为"活动"或"非活动"的对象。
class myObject {
var $tab_name;
var $active;
}
这用于为顺序很重要的选项卡视图构建选项卡数组。
现在,如果我切换我的一个值
$array['abc'] = false;
$array['jkl'] = true;
如何对数组(实际上是有序映射)重新排序,以便true
值保持在前面,保留它们的顺序(应附加任何添加),false
值保留在后面(顺序不重要)?
即。我希望输出为:
array (
'def' => true,
'ghi' => true,
'jkl' => true,
'abc' => false
);
我事先知道的只是值被切换的关键。
似乎没有任何内置的数组排序函数允许您同时访问键和值,这似乎是您在这里需要的,因为幕后的排序算法看起来并不稳定。
我把它划掉了(编码是为了清晰而不是优雅),它可能会有所帮助。它不执行"就地"排序,但如果数据集不是太大,它可能会执行您需要的操作。
function group_array($ary){
$t = array();
$f = array();
$res = array();
foreach (array_keys($ary) as $k){ //Assuming that you're 100% sure that the input array keys are already ordered
if ($ary[$k] == 'true') {
$t[] = $k;
} else if ($ary[$k] == 'false') {
$f[] = $k;
}
}
foreach ($t as $true_key){
$res[$true_key] = 'true';
}
foreach ($f as $false_key){
$res[$false_key] = 'false';
}
return $res;
}
如果数组使用您指定的"活动"和"非活动",则可以只使用 asort($array),它将在顶部返回所有"活动"值,因为它是 alpha 排序。