PHP从某个键向前重新排序数组键,循环回来

时间:2015-01-29 22:18:19

标签: php arrays sorting

所以我有一个数组:

$array = array('Sun','Mon','Tue','Wed','Thu','Fri','Sat');

显然,他们的归档为0-6。

我想提供一个特定的键索引,然后重新排序数组,从该键开始,然后以相同的顺序浏览其余的数组,如下所示:

print_r(somefunction(3, $array));

会打印出来:

array
(
    '0'=>'Wed',
    '1'=>'Thu',
    '2'=>'Fri',
    '3'=>'Sat',
    '4'=>'Sun',
    '5'=>'Mon',
    '6'=>'Tue'
)

是否有核心功能可以做到这一点,或者有人有快速解决方案吗?

更新

这是我的最终功能,范围略大于我上面的问题,它使用了AbraCadaver的答案:

public static function ordered_weekdays($format = 'abr')
{
    $array = $format == 'full' ? array('Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday') : array('Sun','Mon','Tue','Wed','Thu','Fri','Sat');
    return array_merge(array_splice($array, get_option('start_of_week'), count($array)-1), $array);
}

因为它是一个很好的单行,我不需要把它作为一个单独的功能。

3 个答案:

答案 0 :(得分:1)

沿着这些方向尝试一些事情......

function reorder($x,$y)
{
    $c = count($y);
    for ($i=0; $i<$c; $i++)
    {
        $newArray[$i] = $y[$x];
        $x++;
        if ($x > $c) $x = 0;
    }
    return($newArray);
}

答案 1 :(得分:1)

function somefunction($n, array $a) {
    $x = array_slice($a, 0, $n);
    $y = array_slice($a, $n);
    return array_merge($y, $x);
}

// forget this: uneccessary looping...
function somefunction($n, array $a) {
        for($i = 0; $i < $n; $i++) {
                array_push($a, array_shift($a));
        }
        return $a;
}

答案 2 :(得分:1)

我以前做过这件事,并认为它比这更简单,但这就是我的大脑目前所说的:

$index = 3;
$array = array_merge(array_splice($array, $index, count($array)-1), $array);