Необычная сортировка массива php
У меня есть массив:
[0] =>
(
[id] => 254
[fid] => 31
)
[1] =>
(
[id] => 312
[fid] => 29
)
[2] =>
(
[id] => 245
[fid] => 30
)
[3] =>
(
[id] => 233
[fid] => 30
)
[4] =>
(
[id] => 344
[fid] => 31
)
[5] =>
(
[id] => 342
[fid] => 31
)
...
и т.д.
Можно ли сделать такую сортировку, чтобы первым элементом был fid c 29, затем fid с 30, затем fid c 31, потом опять c 29, 30, 31, и т.д.
Спасибо!
Ответы (1 шт):
Автор решения: Pavel
→ Ссылка
<?php
$arr = [
['id'=>4,'fid'=>13],
['id'=>5,'fid'=>14],
['id'=>6,'fid'=>15],
['id'=>1,'fid'=>12],
['id'=>2,'fid'=>12],
['id'=>3,'fid'=>13],
];
$sortedArr=[];
foreach($arr as $row){
$sortedArr[$row['fid']][]=$row;
}
ksort($sortedArr);
$sortedArr=array_values($sortedArr);
$countSortedArr = count($sortedArr);
$result=[];
for($i=0;$i<count($arr);$i++){
if($sortedArr[$i%$countSortedArr]){
$result[]=array_pop($sortedArr[$i%$countSortedArr]);
}else{
$i--;
}
}
var_dump($result);