大脑冻结了一个相当微不足道的问题。如果我从这样的数组开始:
$my_array = array(
'monkey' => array(...),
'giraffe' => array(...),
'lion' => array(...)
);
...并且新元素可能会添加不同的键但总是一个数组值。现在我可以确定第一个元素总是有“猴子”键,但我不能确定任何其他键。
当我完成数组填充后,我想将已知元素'monkey'移动到数组的末尾,而不会影响其他元素的顺序。最有效的方法是什么?
我能想到的每一种方式看起来都很笨拙,我觉得我错过了一些明显的东西。
答案 0 :(得分:85)
我能想到的唯一方法是删除它然后添加它:
$v = $my_array['monkey'];
unset($my_array['monkey']);
$my_array['monkey'] = $v;
答案 1 :(得分:8)
array_shift的效率可能低于unsetting the index,但有效:
$my_array = array('monkey' => 1, 'giraffe' => 2, 'lion' => 3);
$my_array['monkey'] = array_shift($my_array);
print_r($my_array);
另一种选择是使用回调和uksort:
uksort($my_array, create_function('$x,$y','return ($y === "monkey") ? -1 : 1;'));
如果您使用的是PHP5.3 +,或者只是定期将该函数定义为全局函数,您将需要使用正确的lambda。
答案 2 :(得分:3)
我非常喜欢@ Gordon的上述答案,因为它的优雅只是一个班轮,但它只有在钥匙刚开始时才有效。这是另一个适用于任何位置的钥匙的衬垫:
$arr = array('monkey' => 1, 'giraffe' => 2, 'lion' => 3);
$arr += array_splice($arr,array_search('giraffe',array_keys($arr)),1);
编辑:请注意,这会因数字键失败。
答案 3 :(得分:1)
你可以实现一些基本的微积分并获得一个通用函数,用于将数组元素从一个位置移动到另一个位置。
对于PHP,它看起来像这样:
function magicFunction ($targetArray, $indexFrom, $indexTo) {
$targetElement = $targetArray[$indexFrom];
$magicIncrement = ($indexTo - $indexFrom) / abs ($indexTo - $indexFrom);
for ($Element = $indexFrom; $Element != $indexTo; $Element += $magicIncrement){
$targetArray[$Element] = $targetArray[$Element + $magicIncrement];
}
$targetArray[$indexTo] = $targetElement;
}
查看“gloommatter”中的“移动数组元素”以获取详细说明。
http://www.gloommatter.com/DDesign/programming/moving-any-array-elements-universal-function.html
答案 4 :(得分:0)
有助于接受的答复-不要将元素插入相同位置,而要放置在数组的末尾:
$v = $my_array['monkey'];
unset($my_array['monkey']);
代替:
$my_array['monkey'] = $v;
使用:
array_push($my_array, $v);