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'的最小值和最大值?我可以使用几个循环来做到这一点,但我认为可能有更好的方法.
与其他人发布的内容相比,您无法使用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)