PHP 移位数组顺序


PHP shift array order

我正在做某事,我需要用 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;