PHP移位数组顺序

时间:2016-02-14 23:16:48

标签: php arrays sorting

我在处理某些事情,我需要移动一个带有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!

3 个答案:

答案 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;