我正在做某事,我需要用 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英雄,到目前为止,互联网也没有帮助:)
提前感谢!
<?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));
在不知道数组的值应该表示什么的情况下,它有点听见你实际上在尝试做什么。它的外观是一个人的(用户的?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);
}
}
因此,
经过长时间的尝试并从老朋友那里获得一些帮助,这是最终结果:
$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;