[英]PHP sort multidimension array
我想以一種特殊的方式對多維數組進行排序。
我有一個像這樣的數組:
Array (
[551691] => Array (
[19129287] => Array (
[value] => cccccc
[id] => 19129287
[col] => 1
)
[19129288] => Array (
[value] => bbbbb
[id] => 19129288
[col] => 2
)
)
[550141] => Array (
[19071703] => Array (
[value] => aaaaa
[id] => 19071703
[col] => 1
)
[19071706] => Array (
[value] => ccccc
[id] => 19071706
[col] => 2
)
)
[550139] => Array (
[19071675] => Array (
[value] => bbbbb
[id] => 19071675
[col] => 1
)
[19071676] => Array (
[value] => ddddd
[id] => 19071676
[col] => 2
)
)
)
我想按[值]對特定[col]將此數組排序
例如[col]的值為1:
具有鍵550141的第一級數組應移到第一位置,因為[col] => 1的數組中的值為“ aaaaa”
Array (
[550141] => Array ( // <= Moved at first position "value" for col 1 is aaaa
[19071703] => Array (
[value] => aaaaa
[id] => 19071703
[col] => 1
)
[19071706] => Array (
[value] => ccccc
[id] => 19071706
[col] => 2
)
)
[550139] => Array ( // <= Moved at second position
[19071675] => Array (
[value] => bbbbb
[id] => 19071675
[col] => 1
)
[19071676] => Array (
[value] => ddddd
[id] => 19071676
[col] => 2
)
)
[551691] => Array (
[19129287] => Array (
[value] => cccccc
[id] => 19129287
[col] => 1
)
[19129288] => Array (
[value] => bbbbb
[id] => 19129288
[col] => 2
)
)
)
如果有人有一個好主意.. :-)
謝謝
您可以使用http://php.net/usort編寫自己的排序功能
您可能需要類似
usort($array, function($a,$b) {
return ($a['value']<$b['value'])?1:-1;
});
顯然,您需要對其進行調整以適合您的情況,並可能將其放入{}循環中,因為您實際上是在對子數組進行排序。
最后我找到了解決方案。 我不知道這是否是最好的方法,但是它有效:
$sortarray = array();
foreach ($datas as $datas_key => $s) {
foreach ($s as $itemId => $item) {
if ($item['col'] == 2) {
$sortarray[] = array(
'sid' => $datas_key,
'value' => $item['value']
);
}
}
}
usort($sortarray, function($a,$b) {
return ($a['value']<$b['value'])?-1:1;
});
$datas_sorted = array();
foreach ($sortarray as $new_sort) {
$datas_sorted[$new_sort['sid']] = $datas[$new_sort['sid']];
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.