PHP 从某个键开始重新排列数组键,循环返回
PHP reorder array keys from certain key onward, looping back around
所以我有一个数组:
$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);
}
因为它是一个很好的单行代码,所以我不需要将它作为一个单独的函数。
沿着这些方向尝试一些东西...
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);
}
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;
}
我以前做过这个,我认为它比这个更简单,但现在我的大脑是这样说的:
$index = 3;
$array = array_merge(array_splice($array, $index, count($array)-1), $array);
所以我有一个数组:
$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);
}
因为它是一个很好的单行代码,所以我不需要将它作为一个单独的函数。
沿着这些方向尝试一些东西...
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);
}
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;
}
我以前做过这个,我认为它比这个更简单,但现在我的大脑是这样说的:
$index = 3;
$array = array_merge(array_splice($array, $index, count($array)-1), $array);