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

tam*_*ale 49 php arrays sorting

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

$my_array = array(
                  'monkey'  => array(...),
                  'giraffe' => array(...),
                  'lion'    => array(...)
);
Run Code Online (Sandbox Code Playgroud)

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

当我完成填充数组时,我想将已知元素'monkey'移动到数组的末尾,而不会干扰其他元素的顺序.最有效的方法是什么?

我能想到的每一种方式都显得有点笨拙,我觉得我错过了一些明显的东西.

cle*_*tus 91

我能想到的唯一方法是删除它然后添加它:

$v = $my_array['monkey'];
unset($my_array['monkey']);
$my_array['monkey'] = $v;
Run Code Online (Sandbox Code Playgroud)

  • 是的,这可能是最好的方式.我可能想得太多了. (3认同)

Gor*_*don 8

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

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

另一种方法是使用回调和uksort:

uksort($my_array, create_function('$x,$y','return ($y === "monkey") ? -1 : 1;'));
Run Code Online (Sandbox Code Playgroud)

如果使用PHP5.3 +,或者只是定期将函数定义为全局函数,则需要使用正确的lambda.

  • array_shift 的第一个解决方案仅适用于数组的第一个元素。 (3认同)
  • @tamewhale谢谢.我用24只动物做了非常肤浅的基准测试,"unset"确实是最快的.它比`array_shift`快10倍,比'uksort`快300倍. (2认同)