不同於別人已經公佈,因爲這些功能不明白這是在傳遞的數據結構(陣列),你不能使用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