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时,会删除最后一个元素