Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/flash/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP按特定的起始键对数组进行排序/重新排序_Php_Arrays - Fatal编程技术网

PHP按特定的起始键对数组进行排序/重新排序

PHP按特定的起始键对数组进行排序/重新排序,php,arrays,Php,Arrays,我想根据起始值对数组元素进行排序或重新排序 我的阵列: [ 0 => 'Sun', 1 => 'Mon', 2 => 'Tue', 3 => 'Wed', 4 => 'Thu', 5 => 'Fri', 6 => 'Sat' ] $startOn=3 预期产出: [ 3 => 'Wed', 4 => 'Thu', 5 => 'Fri', 6 =&g

我想根据起始值对数组元素进行排序或重新排序

我的阵列:

[
    0 => 'Sun',
    1 => 'Mon',
    2 => 'Tue',
    3 => 'Wed',
    4 => 'Thu',
    5 => 'Fri',
    6 => 'Sat'
]
$startOn=3

预期产出:

[
    3 => 'Wed',
    4 => 'Thu',
    5 => 'Fri',
    6 => 'Sat',
    0 => 'Sun',
    1 => 'Mon',
    2 => 'Tue',
]
我尝试使用
uksort
,但它没有返回预期的输出

uksort($weekDays, function ($a, $b) use ($startOn) {
    return $startOn-$a;
});
电流输出:

[
    3 => 'Wed'
    4 => 'Thu'
    5 => 'Fri'
    6 => 'Sat'
    2 => 'Tue'
    1 => 'Mon'
    0 => 'Sun'
]

您可以使用
foreach

$start = 3;
$r1 = $r2 = [];
foreach($a as $k => $v){
  ($k >= $start) ? ($r1[$k]=$v) : ($r2[$k]=$v);
}
$r = $r1 + $r2;
print_r($r);

工作示例:-

您可以使用
foreach

$start = 3;
$r1 = $r2 = [];
foreach($a as $k => $v){
  ($k >= $start) ? ($r1[$k]=$v) : ($r2[$k]=$v);
}
$r = $r1 + $r2;
print_r($r);
工作示例:-

由于
数组_切片()
代码已从另一个答案中删除,因此我想在此处添加我的版本

最主要的是将第四个参数设置为
true
,以便它保留键

$weekDays = array_slice($weekDays, $startOn, null, true) 
        + array_slice($weekDays, 0, $startOn, true);
由于
array\u slice()
代码已从另一个答案中删除,因此我想在这里添加我的版本

最主要的是将第四个参数设置为
true
,以便它保留键

$weekDays = array_slice($weekDays, $startOn, null, true) 
        + array_slice($weekDays, 0, $startOn, true);

使用
uksort
,检查


使用
uksort
,检查


这是一个有效的解决方案

$k = array_search(3, array_keys($arr));
$arr = array_slice($arr,$k,null,true) + array_slice($arr,0,$k,true);
print_r($arr);

输出:-

Array
(
    [3] => Wed
    [4] => Thu
    [5] => Fri
    [6] => Sat
    [0] => Sun
    [1] => Mon
    [2] => Tue
)
-在数组中搜索给定值,如果成功,则返回第一个对应的键

-提取阵列的一个切片

注意:

array\u slice()将对整数数组索引进行重新排序和重置 违约通过将“保留_关键点”设置为,可以更改此行为 正确。无论此参数如何,字符串键始终保留


这是一个有效的解决方案

$k = array_search(3, array_keys($arr));
$arr = array_slice($arr,$k,null,true) + array_slice($arr,0,$k,true);
print_r($arr);

输出:-

Array
(
    [3] => Wed
    [4] => Thu
    [5] => Fri
    [6] => Sat
    [0] => Sun
    [1] => Mon
    [2] => Tue
)
-在数组中搜索给定值,如果成功,则返回第一个对应的键

-提取阵列的一个切片

注意:

array\u slice()将对整数数组索引进行重新排序和重置 违约通过将“保留_关键点”设置为,可以更改此行为 正确。无论此参数如何,字符串键始终保留


那不是分类。只需对子数组进行切片并将其附加到末尾。您可以使用
($k+7-$startOn)%7
作为
uksort
中的键,检查我的未排序。只需切片子数组并将其附加到末尾。您可以使用
($k+7-$startOn)%7
作为
uksort
中的键,检查我的方法1-没问题,但当$startOn=0时,会出现错误;方法2-当$startOn=0时,会删除最后一个元素方法1-没问题,但当$startOn=0时,会出现错误;方法2-当$startOn=0时,会删除最后一个元素