如何将具有已知键的数组元素移动到PHP中数组的结尾?

大脑冻结了一个相当微不足道的问题。 如果我从这样的数组开始:

$my_array = array( 'monkey' => array(...), 'giraffe' => array(...), 'lion' => array(...) ); 

…新元素可能会添加不同的键,但总是一个数组值。 现在我可以肯定,第一个元素总是会有“猴子”的关键,但我不能确定任何其他的关键。

当我完成填充数组时,我想将已知元素“猴子”移动到数组的末尾,而不妨碍其他元素的顺序。 什么是最有效的方式来做到这一点?

我所能想到的每一个方式似乎都有点笨重,我觉得我错过了一些明显的东西。

我认为这样做的唯一方法是删除它,然后添加它:

 $v = $my_array['monkey']; unset($my_array['monkey']); $my_array['monkey'] = $v; 

array_shift可能比取消 设置索引效率低,但是它的工作原理是:

 $my_array = array('monkey' => 1, 'giraffe' => 2, 'lion' => 3); $my_array['monkey'] = array_shift($my_array); print_r($my_array); 

另一个select是callback和uksort :

 uksort($my_array, create_function('$x,$y','return ($y === "monkey") ? -1 : 1;')); 

如果您使用的是PHP5.3 +,则需要使用正确的lambdaexpression式 ,或者定期将该函数定义为全局函数。

你可以实现一些基本的微积分,并获得将数组元素从一个位置移动到另一个位置的通用function。

对于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

我真的很喜欢@戈登的回答,因为它是一种优雅的单线,但只有在关键时刻才有效。 这是另一个可以在任何位置使用的键盘:

 $arr = array('monkey' => 1, 'giraffe' => 2, 'lion' => 3); $arr += array_splice($arr,array_search('giraffe',array_keys($arr)),1);