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

时间:2010-03-01 22:42:30

标签: php arrays sorting

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

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

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

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

我能想到的每一种方式看起来都很笨拙,我觉得我错过了一些明显的东西。

5 个答案:

答案 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);