101

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

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

$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',
);
4

6 回答 6

198

您可以使用数组联合运算符 ( +) 将原始数组连接到使用已知键 ( one) 的新关联数组。

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

数组键是唯一的,因此它不可能存在于两个位置。

请参阅有关数组运算符的文档:

+ 运算符返回附加到左侧数组的右侧数组;对于两个数组中都存在的键,将使用左侧数组中的元素,而忽略右侧数组中的匹配元素。

于 2012-06-30T17:55:49.950 回答
7

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

$myArray = array_merge(array($key => $value) + $myArray );
于 2013-06-24T10:36:44.103 回答
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;
}

只需调整它以满足您的需要,或使用它并取消设置要移动的索引。也适用于关联数组。

于 2014-03-19T07:55:23.340 回答
2

这是另一个简单的单线,可以使用array_splice()

$myArray = array_splice($myArray,array_search('one',array_keys($myArray)),1) + $myArray;
于 2017-06-21T18:06:15.047 回答
1

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

$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);
于 2017-08-05T20:33:50.900 回答
-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按键对数组进行排序并提供您自己的排序功能。

于 2012-06-30T17:58:59.410 回答