PHP检索2D关联数组中的最小值和最大值

Jam*_*s B 8 php arrays loops max minimum

我有这种格式的数组:

Array
(
    [0] => Array
        (
            [id] => 117
            [name] => Networking
            [count] => 16
        )

    [1] => Array
        (
            [id] => 188
            [name] => FTP
            [count] => 23
        )

    [2] => Array
        (
            [id] => 189
            [name] => Internet
            [count] => 48
        )

)
Run Code Online (Sandbox Code Playgroud)

有没有一种很好的方法来检索'count'的最小值和最大值?我可以使用几个循环来做到这一点,但我认为可能有更好的方法.

Ste*_*rig 6

与其他人发布的内容相比,您无法使用min()/ max()函数来解决此问题,因为这些函数无法理解传入的数据结构(数组).这些函数仅适用于标量数组元素.


开始编辑

使用min()max()似乎产生正确答案的原因与将数组类型转换为整数有关,这是一种未定义的行为:

对于其他类型,转换为整数的行为是未定义的.不要依赖任何观察到的行为,因为它可以在不事先通知的情况下改变

我上面关于类型转换的陈述是错误的.实际上min()并且max()使用数组但不是OP需要它们工作的方式.当使用min()max()使用多个数组或数组数组时,元素从左到右逐个元素进行比较:

$val = min(array(2, 4, 8), array(2, 5, 1)); // array(2, 4, 8)
/*
 * first element compared to first element: 2 == 2
 * second element compared to second element: 4 < 5
 * first array is considered the min and is returned
 */
Run Code Online (Sandbox Code Playgroud)

翻译成OP的问题,这说明直接使用min()max()似乎产生正确结果的原因.阵列的第一个元素是id-值因此,min()max()将它们先比较,捎带导致正确的结果,因为最低id是具有最低count和最高id的是具有最高count.

结束编辑


正确的方法是使用循环.

$a = array(
        array('id' => 117, 'name' => 'Networking', 'count' => 16),
        array('id' => 188, 'name' => 'FTP', 'count' => 23),
        array('id' => 189, 'name' => 'Internet', 'count' => 48)
);
$min = PHP_INT_MAX;
$max = 0;
foreach ($a as $i) {
    $min = min($min, $i['count']);
    $max = max($max, $i['count']);
}
Run Code Online (Sandbox Code Playgroud)