他の人が投稿したものとは対照的に、これらの関数は渡されるデータ構造 (配列) を理解しないため、この問題に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
*/
min()
OPの問題に変換すると、これはand を直接使用すると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']);
}