dongqi4085 2018-01-30 16:12 采纳率: 0%
浏览 13
已采纳

有条件地从多维数组中删除元素

I have this array:

["balance"]=>
  array(5) {
    [0]=>
    array(3) {
      ["balance"]=>
      string(4) "0.00"
      ["id_item"]=>
      string(3) "540"
      ["item"]=>
      string(7) "Lampada"
    }
    [1]=>
    array(3) {
      ["balance"]=>
      string(4) "0.00"
      ["item"]=>
      string(6) "Taglio"
      ["id_item"]=>
      string(3) "541"
    }
    [2]=>
    array(3) {
      ["balance"]=>
      string(4) "0.00"
      ["item"]=>
      string(5) "Piega"
      ["id_item"]=>
      string(3) "542"
    }
    [3]=>
    array(3) {
      ["balance"]=>
      string(4) "2.00"
      ["item"]=>
      string(5) "Piega"
      ["id_item"]=>
      string(3) "542"
    }
    [4]=>
    array(3) {
      ["balance"]=>
      string(4) "7.00"
      ["item"]=>
      string(6) "Gelati"
      ["id_item"]=>
      string(3) "543"
    }

As you note, there are 2 arrays with a subkey "id_item" == 542. I need remove only the duplicate with a balance == 0. In detail I need remove the key == 2 (because the balance is 0 and there is another item with same ID with balance > 0)

This is my try but I cannot go further:

if ( is_array ( $array['balance'] ) && count ( $array['balance'] ) > 0 ) {

                    foreach ( $array['balance'] as $key => $value ) {

                        if ( isset ( $value['id_item'] ) ) {

                            $id_item = $value['id_item'];

                            // re-cycle on the array?
                            // if next id_item == $id_item && value['balance'] == 0.00 remove

                        }

                    }

                }
  • 写回答

1条回答 默认 最新

  • duanjuhuo8772 2018-01-30 16:51
    关注

    I've tried to make it in few lines, check this out:

    $array = [
        "balance" => [
            [
                "balance" => "0.00",
                "id_item" => "540",
                "item" => "Lampada",
            ],
            [
                "balance" => "0.00",
                "item" => "Taglio",
                "id_item" => "541",
            ],
            [
                "balance" => "0.00",
                "item" => "Piega",
                "id_item" => "542",
            ],
            [
                "balance" => "2.00",
                "item" => "Piega",
                "id_item" => "542",
            ],
            [
                "balance" => "7.00",
                "item" => "Gelati",
                "id_item" => "543",
            ]
        ]
    ];
    
    //get array of id_items
    $id_items = array_map(function($e) {
        return $e['id_item'];
    }, $array['balance']);
    
    //get duplicated keys
    $duplicated_keys = array_keys(array_filter(array_count_values($id_items), function($v) {
        return $v > 1;
    }));
    
    //remove duplicated keys where balance is zero
    foreach ($array['balance'] as $k => $balance) {
        if(in_array($balance['id_item'], $duplicated_keys) && $balance['balance'] == 0) {
            unset($array['balance'][$k]);
        }
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 树莓派与pix飞控通信
  • ¥15 自动转发微信群信息到另外一个微信群
  • ¥15 outlook无法配置成功
  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题