PHP通过键的特定开始对数组进行排序/重新排序

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


我的数组:


[

    0 => 'Sun',

    1 => 'Mon',

    2 => 'Tue',

    3 => 'Wed',

    4 => 'Thu',

    5 => 'Fri',

    6 => 'Sat'

]

$ 开始 = 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'

]


红颜莎娜
浏览 159回答 3
3回答

UYOU

您可以使用 foreach$start = 3;$r1 = $r2 = [];foreach($a as $k => $v){  ($k >= $start) ? ($r1[$k]=$v) : ($r2[$k]=$v);}$r = $r1 + $r2;print_r($r);工作示例:- https://3v4l.org/1KDoR

茅侃侃

使用uksort,查看演示$startOn = 3;uksort($array,function($a,$b)use($startOn){return ($a + 7 - $startOn) % 7 - ($b + 7 - $startOn) % 7;});print_r($array);

墨色风雨

这是工作解决方案,$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_search — 在数组中搜索给定的值,如果成功则返回第一个对应的键array_slice — 提取数组的一个切片笔记:默认情况下, array_slice()将重新排序和重置整数数组索引。可以通过将 preserve_keys 设置为 TRUE来更改此行为。无论此参数如何,始终保留字符串键。
打开App,查看更多内容
随时随地看视频慕课网APP