将关联数组的任何元素移动到数组的开头的最佳方法是什么?
例如,假设我有以下数组:
$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',
);
答案 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);