我在处理某些事情,我需要移动一个带有ID的数组,这样ID(人)就无法获得自己的ID,除非“游戏”结束。
所以我得到了这个:
$array = array(
"2" => "2",
"3" => "3",
"6" => "6",
"8" => "8",
"12" => "12",
);
我想这样:
$array = array(
"2" => "3",
"3" => "6",
"6" => "8",
"8" => "12",
"12" => "2",
);
我不是一个真正的PHP英雄,互联网到目前为止没有帮助:)
提前thx!答案 0 :(得分:1)
<?php
$in = array(
"2" => "2",
"3" => "3",
"6" => "6",
"8" => "8",
"12" => "12",
);
$out = array(
"2" => "3",
"3" => "6",
"6" => "8",
"8" => "12",
"12" => "2",
);
function transpose_values(array $in) {
$values = array_values($in);
$first = array_shift($values);
$first && array_push($values, $first);
$out = array_combine($in, $values);
return $out;
}
assert($out == transpose_values($in));
答案 1 :(得分:0)
在不知道数组的值应该代表什么的情况下,有点听到它告诉你实际上要做什么。它看起来的方式是一个人(用户的?)ID将代表某些特定情况下完全不同的东西。
因此,在面值处提出问题时,您需要一个新数组,其中旧数组的值为这些值,比原来的位置提前一位。使用reset()和next()是这里的关键:
$newArray = [];
$firstVal = reset($array);
$i=0;
foreach($array as $key => $val) {
++$i;
// Deal with the last array-element to be given the first's value
if(count($newArray) === $i) {
$newArray[$key] = $firstVal;
} else {
$newArray[$key] = next($array);
}
}
答案 2 :(得分:0)
所以经过长时间的努力并从老朋友那里得到一些帮助后,这才是最终结果:
$prev = null;
$firstIndex = null;
foreach ($userArr as $i => $user) {
if (is_null($prev)) {
$firstIndex = $i;
$prev = $user;
continue;
}
$userArr[$i] = $prev;
$prev = $user;
}
$userArr[$firstIndex] = $prev;