将每个值的位置移动到下一个索引 在一个关联数组中

3

I have an array in PHP. For example :

Array
(
    [3] => 6
    [2] => 4
    [1] => 2
    [4] => 8
    [6] => 12
)

我需要将每个值的位置移动到下一个索引位置。

例如,期望的输出结果为

Array
(
    [3] => 12
    [2] => 6
    [1] => 4
    [4] => 2
    [6] => 8
)

我需要保持键不变,将值循环移位。

最简单的方法是什么?

我已经尝试过的方法:

$lastValue = $array[array_keys($array)[4]];
$firstKey  = array_keys($array)[0];

for ($i=4; $i>0; $i--) {
$array[array_keys($array)[$i]] = $array[array_keys($array)[$i-1]];
   }

$array[$firstKey] = $lastValue;
print_r($array);

1
@GameO7er 在那个问题中,要求是移动键值对的位置。 我需要的是仅循环移动值。 - Sangeetha
1
请不要问那种问题,而不展示你在提问之前所做的任何尝试。哪种方法最简单实现这个? - 04FS
1
你编辑了帖子后,我已经取消了标记。欢迎来到 Stack Overflow 并享受它,亲爱的朋友 :-) 我刚刚投了一票支持你的问题,请原谅我。 - GameO7er
@04FS 好的,我刚刚编辑了我的问题。 - Sangeetha
2个回答

6

PHP非常酷^_^,灵感部分据说是从@Peters的解决方案中“借”来的,抱歉,伙计 :)

<?php

$array = 
[
    3 => 6,
    2 => 4,
    1 => 2,
    4 => 8,
    6 => 12,
];

$newArray = array_combine(array_keys($array), array_merge([array_pop($array)], $array));
var_dump($newArray);

演示


2
我没有机会测试我的答案。但是你的可以解决问题。我应该检查函数输出。+1 - Peter
1
@Peter,你是第一个! - myxaxa

0

您可以对该值进行循环移位。演示

$array =
    [
        3 => 6,
        2 => 4,
        1 => 2,
        4 => 8,
        6 => 12,
    ];
$values = [null];
$keys = [];
foreach($array as $k => $v){
    $keys[] = $k;
    $values[] = $v;            
}
$values[0] = $v;
array_pop($values);
$result = array_combine($keys,$values);

print_r($result);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接