代码之家  ›  专栏  ›  技术社区  ›  ForgivenIT

需要通过多个键中的重复值组合php数组

  •  0
  • ForgivenIT  · 技术社区  · 6 年前

    我有一个值超过1000的数组。这个数组在一个PHP文件中,我将把结果返回到另一个数组,以便输出到Excel文件。非常感谢您的帮助

    Array
    (
    [0] => Array
        (
            [isbn] => 97845684684
            [price] => 30.99
            [po] => PXB
            [low] => 24.99
        )
    [1] => Array
        (
            [isbn] => 97845684684
            [price] => 30.99
            [po] => PXB
            [low] => 31.99
        )
    [2] => Array
        (
            [isbn] => 97845684684
            [price] => 30.99
            [po] => PXB
            [low] => 38.99
        )
    [3] => Array
        (
            [isbn] => 97845684684
            [price] => 30.99
            [po] => MXB
            [low] => 24.99
        )
    [4] => Array
        (
            [isbn] => 97845684684
            [price] => 30.99
            [po] => MXB
            [low] => 31.99
        )
    [5] => Array
        (
            [isbn] => 97845684684
            [price] => 30.99
            [po] => MXB
            [low] => 38.99
        )
    [6] => Array
        (
            [isbn] => 97845684978
            [price] => 30.99
            [po] => PXB
            [low] => 18.99
        )
    [7] => Array
        (
            [isbn] => 97845684978
            [price] => 30.99
            [po] => PXB
            [low] => 19.99
        )
    [8] => Array
        (
            [isbn] => 97845684978
            [price] => 30.99
            [po] => PXB
            [low] => 23.99
        )
    )
    

    我需要能够对数组进行排序,并返回每个订单都有ISBN的输出,使该订单的最低值保持在低位。我需要按ISBN、PO和low进行排序。因此,我希望输出如下:

     Array
    (
    [0] => Array
        (
            [isbn] => 97845684684
            [price] => 30.99
            [po] => PXB
            [low] => 24.99
        )
    [1] => Array
        (
            [isbn] => 97845684684
            [price] => 30.99
            [po] => MXB
            [low] => 31.99
        )
    [2] => Array
        (
            [isbn] => 97845684978
            [price] => 30.99
            [po] => PXB
            [low] => 18.99
        )
    [3] => Array
        (
            [isbn] => 97845684684
            [price] => 30.99
            [po] => MXB
            [low] => 15.99
        )
    
    1 回复  |  直到 6 年前
        1
  •  1
  •   Mawia HL    6 年前

    usort

    $array = //your array
    
    function cmp($a, $b) {
        if ($a['po'] == $b['po'] && $a['isbn'] == $b['isbn']) {
           return ($a['low'] < $b['low']) ? -1 : 1;
        }else{
            return 0;
        }
    
    }
    
    usort($array, 'cmp');
    

    $po = null;
    $isbn = null;
    $result = [];
    foreach($array as $key =>$val){    
        if($val['po']==$po && $val['isbn']==$isbn){
        }else{
            $result[] = $val; 
        }
        $isbn = $val['isbn'];
        $po = $val['po'];
    }
    echo '<pre>';
    print_r($result);
    echo '</pre>';