假设我有一个类似
的数组$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
值保留在后方(顺序不重要)?
IE。我希望输出为:
array (
'def' => true,
'ghi' => true,
'jkl' => true,
'abc' => false
);
事先我所知道的是切换价值的关键。
答案 0 :(得分:2)
似乎没有任何内置数组排序函数允许您同时访问键和值,这似乎是您需要的,因为幕后的排序算法看起来不像稳定。
我抓了这个(为了清晰而不是优雅而编码),它可能有所帮助。它没有“就地”排序,但如果数据集不是太大,它可能会做你需要的。
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;
}
答案 1 :(得分:0)
如果数组使用指定的“活动”和“非活动”,则可以使用asort($ array),它将返回顶部的所有“活动”值,因为它是alpha排序。