dongtuo7364 2018-06-09 23:02
浏览 26
已采纳

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

I have an array that has over 1000 values. This array is in a php file, i will be returning the results to an another array for output to an excel file. An assistance would be greatly appreciated

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
    )
)

I need to be able to sort the array and return an output that has an isbn for each po keeping the lowest value of low for that po. I would need to sort by isbn, po, and low. So i am looking for an output as:

 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条回答 默认 最新

  • dtnwm4807 2018-06-10 06:11
    关注

    Use usort to filter through the low:

    $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');
    

    Foreach loop to repopulate the array.

    $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>';
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥17 pro*C预编译“闪回查询”报错SCN不能识别
  • ¥15 微信会员卡接入微信支付商户号收款
  • ¥15 如何获取烟草零售终端数据
  • ¥15 数学建模招标中位数问题
  • ¥15 phython路径名过长报错 不知道什么问题
  • ¥15 深度学习中模型转换该怎么实现
  • ¥15 HLs设计手写数字识别程序编译通不过
  • ¥15 Stata外部命令安装问题求帮助!
  • ¥15 从键盘随机输入A-H中的一串字符串,用七段数码管方法进行绘制。提交代码及运行截图。
  • ¥15 TYPCE母转母,插入认方向