【问题标题】:how to ommit array from multidimensional array based on their values如何根据它们的值从多维数组中省略数组
【发布时间】:2018-09-15 05:48:07
【问题描述】:

我有一个输入数组:

 Array(
        Array(
            [vehicle] => BUS NO.1
            [trip_name] => Trip00011
            [running_km] => 5000
        )
        Array(
            [vehicle] => BUS NO.2
            [trip_name] => Trip00021
            [running_km] => 2400
        )
        Array(
            [vehicle] => BUS NO.1
            [trip_name] => Trip00011
            [running_km] => 0
        )
        Array(
            [vehicle] => BUS NO.2
            [trip_name] => Trip00011
            [running_km] => 0
        )
        Array(
            [vehicle] => BUS NO.2
            [trip_name] => Trip00021
            [running_km] => 0
        )
    )

我需要把这个数组改成:

Array(
    Array(
        [vehicle] => BUS NO.1
        [trip_name] => Trip00011
        [running_km] => 5000
    )
    Array(
        [vehicle] => BUS NO.2
        [trip_name] => Trip00021
        [running_km] => 2400
    )
    Array(
        [vehicle] => BUS NO.2
        [trip_name] => Trip00011
        [running_km] => 0
    )
)

请查看两个数组。对于相同的vehicle相同的trip_name,我需要根据running_km 中存在的值省略running_km => 0 数组。你能帮我做这件事吗?

【问题讨论】:

标签: php arrays multidimensional-array


【解决方案1】:

如果你循环数组,你可以构建一个复合数组键。 (例如:'BUS NO.2 Trip00021')。
如果运行公里数更多,则覆盖新数组中的项目。

在循环之后,我执行 array_values 来删除关联数组键到索引数组键。

foreach($arr as $item){
    $key = $item['vehicle'] . $item['trip_name'];
    if(isset($new[$key])){
        if($item['running_km'] > $new[$key]['running_km']) $new[$key] = $item;
    }else{
        $new[$key] = $item;
    }

}
$new = array_values($new);

var_dump($new);

输出:

array(3) {
  [0]=>
  array(3) {
    ["vehicle"]=>
    string(8) "BUS NO.1"
    ["trip_name"]=>
    string(9) "Trip00011"
    ["running_km"]=>
    string(4) "5000"
  }
  [1]=>
  array(3) {
    ["vehicle"]=>
    string(8) "BUS NO.2"
    ["trip_name"]=>
    string(9) "Trip00021"
    ["running_km"]=>
    string(4) "2400"
  }
  [2]=>
  array(3) {
    ["vehicle"]=>
    string(8) "BUS NO.2"
    ["trip_name"]=>
    string(9) "Trip00011"
    ["running_km"]=>
    string(1) "0"
  }
}

https://3v4l.org/4qX7q

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-11-24
    • 1970-01-01
    • 2011-05-26
    • 2018-09-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多