PHP:将关联数组元素移动到数组的开头

时间:2012-06-30 17:52:23

标签: php

将关联数组的任何元素移动到数组的开头的最佳方法是什么?

例如,假设我有以下数组:

$myArray = array(
    'two'   => 'Blah Blah Blah 2',
    'three' => 'Blah Blah Blah 3',
    'one'   => 'Blah Blah Blah 1',
    'four'  => 'Blah Blah Blah 4',
    'five'  => 'Blah Blah Blah 5',
);

我想要做的就是移动一个'元素到开头,最后是以下数组:

$myArray = array(
    'one'   => 'Blah Blah Blah 1',
    'two'   => 'Blah Blah Blah 2',
    'three' => 'Blah Blah Blah 3',
    'four'  => 'Blah Blah Blah 4',
    'five'  => 'Blah Blah Blah 5',
);

7 个答案:

答案 0 :(得分:152)

这有效:

$myArray = array('one' => $myArray['one']) + $myArray;

答案 1 :(得分:6)

如果您有数字数组键并想重新索引数组键,最好将它放入array_merge,如下所示:

$myArray = array_merge(array($key => $value) + $myArray );

答案 2 :(得分:2)

有点晚了,但是如果有人需要它,我创建了这个小片段。

function arr_push_pos($key, $value, $pos, $arr) 
{
    $new_arr = array();
    $i = 1;

    foreach ($arr as $arr_key => $arr_value) 
    {
        if($i == $pos) 
            $new_arr[$key] = $value;

        $new_arr[$arr_key] = $arr_value;

        ++$i;
    }

    return $new_arr;
}

只需根据您的需要进行调整,或者使用它并取消设置要移动的索引。也适用于关联数组。

答案 3 :(得分:1)

这是另一个简单的单行程,使用array_splice()完成此任务:

$myArray = array_splice($myArray,array_search('one',array_keys($myArray)),1) + $myArray;

答案 4 :(得分:1)

如果你有2个数组, 1st有元素移动到第二个元素数组的顶部,你可以使用

$result = \array_replace($ArrayToMoveToTop, $myArray);

以下是代码示例:

//source array    
$myArray = [
    'two' => 'Blah Blah Blah 2',
    'three' => 'Blah Blah Blah 3',
    'one' => 'Blah Blah Blah 1',
    'four' => 'Blah Blah Blah 4',
    'five' => 'Blah Blah Blah 5',
];
// set necessary order
$orderArray = [
    'one' => '',
    'two' => '',
];
//apply it
$result = \array_replace($orderArray, $myArray);
\print_r($result);

答案 5 :(得分:-1)

PHP array_unshift手册的注释中有一个函数可用于将带元素的元素添加到数组的开头:

function array_unshift_assoc(&$arr, $key, $val)
{
    $arr = array_reverse($arr, true);
    $arr[$key] = $val;
    return array_reverse($arr, true);
}

取消设置元素并使用上述功能重新插入:

$tmp = $myArray['one'];
unset($myArray['one']);
$myArray = array_unshift_assoc($myArray, 'one', $tmp);

更通用的方法可能是使用uksort按键对数组进行排序,并提供自己的排序功能。

答案 6 :(得分:-2)

我更喜欢使用@ Mark的解决方案array-merge

$myArray = array_merge( ['one' => $myArray['one']], $myArray);