【问题标题】:Getting the max value of a two dimentional array with Laravel collection使用 Laravel 集合获取二维数组的最大值
【发布时间】:2021-06-20 09:22:43
【问题描述】:

我正在尝试使用 Laravel 使用集合来获取二维数组的最大值,但我得到的结果真的很奇怪。

我的代码:

dump($this->data);
dump(collect($this->data)->max());
dd(max(collect($this->data)->max()));

结果:

array:8 [▼
  "2021-03-15" => array:2 [▼
    "premium_time" => 0
    "free_time" => 0
  ]
  "2021-03-16" => array:2 [▼
    "premium_time" => 740.2
    "free_time" => 316.62
  ]
  "2021-03-17" => array:2 [▼
    "premium_time" => 623.46
    "free_time" => 1953.46
  ]
  "2021-03-18" => array:2 [▼
    "premium_time" => 1445.85
    "free_time" => 512.29
  ]
  "2021-03-19" => array:2 [▼
    "premium_time" => 477.76
    "free_time" => 545.28
  ]
  "2021-03-20" => array:2 [▼
    "premium_time" => 414.61
    "free_time" => 923.5
  ]
  "2021-03-21" => array:2 [▼
    "premium_time" => 803.16
    "free_time" => 115.34
  ]
  "2021-03-22" => array:2 [▼
    "premium_time" => 401.14
    "free_time" => 802.73
  ]
]

array:2 [▼
  "premium_time" => 1445.85
  "free_time" => 512.29
]

1445.85

正确的最大值是 1943.56 而不是 1445.85。这个结果对我来说毫无意义。

但是,max() 在我指定一个键时有效,但在这种情况下我必须循环所有数组...例如,此函数有效:

private function get_max(array $charts, array $data){
    $max = 0;
    foreach($charts as $k => $v){
        $local_max = collect($this->data)->max($k);

        if($local_max > $max){
            $max = $local_max;
        }
    }
    return $max;
}

所以我的问题是:

  1. 你知道max() 的真正作用吗?
  2. 您知道我的foreach 解决方案是否更好吗?

干杯

【问题讨论】:

  • 尝试使用flatten 然后max collect($this->data)->flatten()->max();
  • 我不敢相信我错过了flatten() 方法。它确实有效!但是我不知道如何接受您的回答。

标签: php arrays laravel max laravel-8


【解决方案1】:

您可以使用flatten,然后使用max

collect($this->data)->flatten()->max(); 

您可以通过提供的链接阅读文档,了解每种方法的作用。

每个结果的示例:

$array = [
    "2021-03-15" => [
        "premium_time" => 0,
        "free_time" => 0
    ],
    "2021-03-16" => [
        "premium_time" => 740.2,
        "free_time" => 316.62
    ],
    "2021-03-17" => [
        "premium_time" => 623.46,
        "free_time" => 1953.46
    ],
    "2021-03-18" => [
        "premium_time" => 1445.85,
        "free_time" => 512.29
    ],
    "2021-03-19" => [
        "premium_time" => 477.76,
        "free_time" => 545.28
    ],
    "2021-03-20" => [
        "premium_time" => 414.61,
        "free_time" => 923.5
    ],
    "2021-03-21" => [
        "premium_time" => 803.16,
        "free_time" => 115.34
    ],
    "2021-03-22" => [
        "premium_time" => 401.14,
        "free_time" => 802.73
    ]
];

dump(collect($array)->flatten());
/*
Illuminate\Support\Collection {#1863 ▼
  #items: array:16 [▼
    0 => 0
    1 => 0
    2 => 740.2
    3 => 316.62
    4 => 623.46
    5 => 1953.46
    6 => 1445.85
    7 => 512.29
    8 => 477.76
    9 => 545.28
    10 => 414.61
    11 => 923.5
    12 => 803.16
    13 => 115.34
    14 => 401.14
    15 => 802.73
  ]
}
*/

dump(collect($array)->flatten()->max());
// 1953.46

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-29
    • 2014-06-28
    • 2016-06-21
    • 2014-05-21
    相关资源
    最近更新 更多