不同于别人已经公布,因为这些功能不明白这是在传递的数据结构(阵列),你不能使用min()
/max()
功能这一问题。只有这些功能为标量数组元素工作。
BEGIN编辑
之所以使用min()
和max()
似乎得到正确答案的类型转换阵列整数涉及这是一个undefined behaviour:
转换为整数 的行为未定义为其他t YPES。不要 依赖任何观察到的行为,因为它可以改变,恕不另行通知。
我上面关于类型转换的说法是错误的。实际上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
*/
翻译成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']);
}
+1我今天遇到这个问题,我只是做了一个循环。对其他方法有好奇。 – MitMaro 2009-08-28 06:22:23
如果有一些功能可以做到这一点,它将用循环来实现,那么使用你自己的函数有什么不好?! – 2009-08-28 06:25:46
@Svetlozar Angelov:对于PHP函数,循环将用C编写,而不是PHP,所以它们通常更快。 – 2009-08-28 08:21:59