如何高效地查找嵌套 PHP 数组中的最小值和最大值?

Barbara Streisand
发布: 2024-10-26 15:04:02
原创
398 人浏览过

How to Efficiently Find Minimum and Maximum Values in a Nested PHP Array?

从 PHP 数组中检索最小值和最大值

问题:

给定一个嵌套的 PHP 数组,确定如何有效地提取特定键的最小值和最大值。

示例:

<code class="php">$array = [
    [
        'id' => '20110209172713',
        'Date' => '2011-02-09',
        'Weight' => '200',
    ],
    [
        'id' => '20110209172747',
        'Date' => '2011-02-09',
        'Weight' => '180',
    ],
    [
        'id' => '20110209172827',
        'Date' => '2011-02-09',
        'Weight' => '175',
    ],
    [
        'id' => '20110211204433',
        'Date' => '2011-02-11',
        'Weight' => '195',
    ],
];</code>
登录后复制

解决方案:

选项 1:使用 array_column() 和 min()/max()

此方法利用 array_column() 函数将“权重”值提取到数值数组中。然后使用 min() 和 max() 函数分别确定最小值和最大值。

<code class="php">$weights = array_column($array, 'Weight');
$minValue = min($weights);
$maxValue = max($weights);</code>
登录后复制

选项 2:使用 array_map()

与选项 1 类似,此方法利用 array_map() 提取“权重”值。但是,它需要自定义函数来执行映射。

<code class="php">$weights = array_map(function($item) {
    return $item['Weight'];
}, $array);

$minValue = min($weights);
$maxValue = max($weights);</code>
登录后复制

选项 3(已弃用):使用嵌套循环

不建议使用此方法,因为它是效率相对较低,特别是对于大型数组。

<code class="php">$minValue = INF;
$maxValue = -INF;

foreach ($array as $item) {
    if ($item['Weight'] < $minValue) {
        $minValue = $item['Weight'];
    }

    if ($item['Weight'] > $maxValue) {
        $maxValue = $item['Weight'];
    }
}</code>
登录后复制

选项 4:使用 array_reduce()

此方法对于需要执行额外计算的特定场景很有用或在确定最小值或最大值时进行处理。

<code class="php">$minValue = array_reduce($array, function($min, $item) {
    return min($min, $item['Weight']);
}, PHP_INT_MAX);

$maxValue = array_reduce($array, function($max, $item) {
    return max($max, $item['Weight']);
}, -PHP_INT_MAX);</code>
登录后复制

以上是如何高效地查找嵌套 PHP 数组中的最小值和最大值?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!