例如,我有一个像$array = ('a' => 2, 'b' => 1, 'c' => 4);
这样的数组,我需要将a
与c
交换,以获得此$array = ('c' => 4, 'b' => 1, 'a' => 2);
。在没有创建新阵列的情况下,这是最好的方法吗?我知道可以使用XOR,但我还需要保存索引。
答案 0 :(得分:1)
array_splice
会很完美,但不幸的是它不会保留插入数组中的键。所以你不得不采取更多的手动切片和切块:
function swapOffsets(array $array, $offset1, $offset2) {
list($offset1, $offset2) = array(min($offset1, $offset2), max($offset1, $offset2));
return array_merge(
array_slice($array, 0, $offset1, true),
array_slice($array, $offset2, 1, true),
array_slice($array, $offset1 + 1, $offset2 - $offset1 - 1, true),
array_slice($array, $offset1, 1, true),
array_slice($array, $offset2 + 1, null, true)
);
}
答案 1 :(得分:0)
如果你想纯粹交换第一个和最后一个位置,这是一种方法:
$first = array(key($array) => current($array)); // Get the first key/value pair
array_shift($array); // Remove it from your array
end($array);
$last = array(key($array) => current($array)); // Get the last key/value pair
array_pop($array); // Remove it from the array
$array = array_merge($last, $array, $first); // Put it back together
给你:
Array
(
[c] => 4
[b] => 1
[a] => 2
)
更新:只是为了好玩,你可以将其压缩一点:
$first = array(key($array) => current($array));
$last = array_flip(array(end($array) => key($array)));
$array = array_merge($last, array_slice($array,1,count($array) - 2), $first);
更新2:
哦,是的,我们现在可以完全在一行代码中执行此操作:
$array = array_merge(array_flip(array(end($array) => key($array))), array_slice($array,1,count($array) - 2), array_flip(array(reset($array) => key($array))));
这很有趣,感谢您的挑战。 =)