首页 > 解决方案 > 如何在 PHP 7 中使用子数组键值对关联数组进行排序

问题描述

我想使用关联数组中的子数组键对关联数组进行升序排序。

以下是我的数组。

Array
(
    [0] => Array
        (
            [weight] => 5.6
            [item_id] => wQsK0EpTSkAAAAFvOVohK1wK
            [item_reference] => M-AAH-960
            [tracking_details] => Array
                (
                    [article_id] => G4KZ00002482EXP00007
                    [consignment_id] => G4KZ00002482
                    [barcode_id] => G4KZ00002482EXP00007
                )

            [product_id] => exp
        )

    [1] => Array
        (
            [weight] => 19.2
            [item_id] => wQsK0EpTSkAAAAFvOVohK1wK
            [item_reference] => M-AAH-960
            [tracking_details] => Array
                (
                    [article_id] => G4KZ00002482EXP00002
                    [consignment_id] => G4KZ00002482
                    [barcode_id] => G4KZ00002482EXP00002
                )

            [product_id] => exp
        )

    [2] => Array
        (
            [weight] => 18.5
            [item_id] => wQsK0EpTSkAAAAFvOVohK1wK
            [item_reference] => M-AAH-960
            [tracking_details] => Array
                (
                    [article_id] => G4KZ00002482EXP00003
                    [consignment_id] => G4KZ00002482
                    [barcode_id] => G4KZ00002482EXP00003
                )

            [product_id] => exp
        )

    [3] => Array
        (
            [weight] => 19.3
            [item_id] => wQsK0EpTSkAAAAFvOVohK1wK
            [item_reference] => M-AAH-960
            [tracking_details] => Array
                (
                    [article_id] => G4KZ00002482EXP00006
                    [consignment_id] => G4KZ00002482
                    [barcode_id] => G4KZ00002482EXP00006
                )

            [product_id] => exp
        )

)

我想要article_id使​​用循环升序排列的值。

输出将使用升序..

article_id G4KZ00002482EXP00002
weight 19.2

article_id G4KZ00002482EXP00003
weight 18.5

article_id G4KZ00002482EXP00006
weight 19.3

article_id G4KZ00002482EXP00007
weight 5.6

我使用了以下脚本,但没有给出正确的结果,它返回错误。

$result = array(
                array('weight'=>5.6, 'item_id'=>'wQsK0EpTSkAAAAFvOVohK1wK','item_reference'=>'M-AAH-960',
                'tracking_details'=>array('article_id'=>'G4KZ00002482EXP00007','consignment_id'=>'G4KZ00002482','barcode_id'=>'G4KZ00002482EXP00007'),
                'product_id'=>'exp'
            ),

               array('weight'=>19.2, 'item_id'=>'wQsK0EpTSkAAAAFvOVohK1wK','item_reference'=>'M-AAH-960',
                'tracking_details'=>array('article_id'=>'G4KZ00002482EXP00002','consignment_id'=>'G4KZ00002482','barcode_id'=>'G4KZ00002482EXP00002'),
                'product_id'=>'exp'
            ),

              array('weight'=>18.5, 'item_id'=>'wQsK0EpTSkAAAAFvOVohK1wK','item_reference'=>'M-AAH-960',
                'tracking_details'=>array('article_id'=>'G4KZ00002482EXP00003','consignment_id'=>'G4KZ00002482','barcode_id'=>'G4KZ00002482EXP00003'),
                'product_id'=>'exp'
            ),

              array('weight'=>19.3, 'item_id'=>'wQsK0EpTSkAAAAFvOVohK1wK','item_reference'=>'M-AAH-960',
                'tracking_details'=>array('article_id'=>'G4KZ00002482EXP00006','consignment_id'=>'G4KZ00002482','barcode_id'=>'G4KZ00002482EXP00006'),
                'product_id'=>'exp'
            ),   
            );

foreach ($result as $key => $value) {
   echo  $output = sort(array_column($result, 'article_id'));


}

标签: phparrayssorting

解决方案


我创建了一个实现,它提供了你想要的输出

usort($result,  function ( $a,  $b) { 
    return ($a['tracking_details']['article_id'] <=> $b['tracking_details']['article_id']); 
});

foreach($result as $item) {
    print($item['tracking_details']['article_id'].PHP_EOL);
    print($item['weight'].PHP_EOL);
    print(PHP_EOL);
}

这使用 usort 和<=>比较文章 ID-s。


推荐阅读