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

我想要做的就是将'one'元素移动到开始部分,并结束以下数组:

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

这工作:

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

如果你有数值数组键,并且想要重新索引数组键,最好把它放入array_merge如下所示:

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

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

 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; } 

只需调整它以适应您的需求,或使用它并取消索引移动。 也可以和关联数组一起工作。

下面是使用array_splice()完成这个工作的另一个简单array_splice()

 $myArray = array_splice($myArray,array_search('one',array_keys($myArray)),1) + $myArray; 
 //source array $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', ); // set necessary order $orderArray = array( 'one' => '', 'two' => '', ); //apply it $result = array_replace($orderArray, $myArray); print_r($result); 

我更喜欢与@ Mark的解决scheme进行数组合并 。

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

array_unshift的PHP手册的注释中有一个函数,它可以用一个key来添加一个元素到数组的开头:

 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按键sorting数组,并提供自己的sortingfunction。