簡體   English   中英

PHP排序多維數組

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM