让大脑为一个相当小的问题而冻结。如果我从这样的数组开始:
$my_array = array(
'monkey' => array(...),
'giraffe' => array(...),
'lion' => array(...)
);
...新元素可能会被添加不同的键,但总是一个数组值。现在我可以肯定第一个元素总是有键'monkey',但我不能肯定任何其他键。
当我填充完数组后,我想把已知的元素'monkey'移到数组的末尾,而不打乱其他元素的顺序,最有效的方法是什么?
我能想到的每一种方法似乎都有点笨拙,我觉得我错过了一些明显的东西。
7条答案
按热度按时间uqcuzwp81#
我能想到的唯一方法是删除它,然后添加它:
brccelvz2#
array_shift的效率可能不如取消设置索引,但它确实有效:
另一种方法是使用回调和uksort:
如果您使用PHP5.3+,或者只是将函数定期定义为全局函数,则需要使用适当的lambda。
qhhrdooz3#
我真的很喜欢@Gordon上面的回答,因为它作为一个行程序是优雅的,但它只适用于键在开头的情况。下面是另一个行程序,它适用于任何位置的键:
**EDIT:**请注意,使用数字键会失败。
mxg2im7a4#
你可以实现一些基本的演算,得到一个通用函数,把数组元素从一个位置移动到另一个位置。
对于PHP,它如下所示:
查看“gloommatter”中的“移动数组元素”以获得详细解释。
http://www.gloommatter.com/DDesign/programming/moving-any-array-elements-universal-function.html
k7fdbhmy5#
这样不行吗?
eqfvzcg86#
基于@cletus answer,我在foreach中使用它来删除特定元素的重复项,并将第一个出现的元素移到数组末尾,如下所示:
sdnqo3pr7#
在foreach循环中使用数组索引有条件地执行此操作: