很多很好的答案。这是一个基于@RubbelDeCatc 答案的简单方法。它的美妙之处在于您只需要知道数组键,而不是它的当前位置(重新定位之前)。
/**
* Reposition an array element by its key.
*
* @param array $array The array being reordered.
* @param string|int $key They key of the element you want to reposition.
* @param int $order The position in the array you want to move the element to. (0 is first)
*
* @throws \Exception
*/
function repositionArrayElement(array &$array, $key, int $order): void
{
if(($a = array_search($key, array_keys($array))) === false){
throw new \Exception("The {$key} cannot be found in the given array.");
}
$p1 = array_splice($array, $a, 1);
$p2 = array_splice($array, 0, $order);
$array = array_merge($p2, $p1, $array);
}
直接使用:
$fruits = [
'bananas'=>'12',
'apples'=>'23',
'tomatoes'=>'21',
'nuts'=>'22',
'foo'=>'a',
'bar'=>'b'
];
repositionArrayElement($fruits, "foo", 1);
var_export($fruits);
/** Returns
array (
'bananas' => '12',
'foo' => 'a', <-- Now moved to position #1
'apples' => '23',
'tomatoes' => '21',
'nuts' => '22',
'bar' => 'b',
)
**/
也适用于数值数组:
$colours = ["green", "blue", "red"];
repositionArrayElement($colours, 2, 0);
var_export($colours);
/** Returns
array (
0 => 'red', <-- Now moved to position #0
1 => 'green',
2 => 'blue',
)
*/
演示