たとえば、配列内に配列があります。
[
[0, 20, 5],
[5, 0, 15],
[5, 10, 0]
]
各列の最大数を取得する必要があります。
- の最大値
[0 , 5 , 5]は5であるため、結果配列に入ります。 - の最大値
[20, 0, 10]は20であるため、結果配列に入ります。 - の最大値
[5, 15, 0]は15であるため、結果配列に入ります。
最終結果の配列には が含まれている必要があります[5, 20, 15]。
たとえば、配列内に配列があります。
[
[0, 20, 5],
[5, 0, 15],
[5, 10, 0]
]
各列の最大数を取得する必要があります。
[0 , 5 , 5]は5であるため、結果配列に入ります。[20, 0, 10]は20であるため、結果配列に入ります。[5, 15, 0]は15であるため、結果配列に入ります。最終結果の配列には が含まれている必要があります[5, 20, 15]。
まず、配列を転置する必要があります(行と列を反転します)。
function array_transpose($arr) {
$map_args = array_merge(array(NULL), $arr);
return call_user_func_array('array_map', $map_args);
}
(PHP 2D配列を転置するためのより良い方法はありますか? -それがどのように機能するかについての説明については、その質問を読んでください)
max次に、関数を新しい配列にマップできます。
$maxes = array_map('max', array_transpose($arr));
例:http ://codepad.org/3gPExrhO
出力[インデックス1は(20、0、10)の最大値である必要があると言ったので、これは(5、15、20)の代わりにあなたが意味したことだと思います]:
Array
(
[0] => 5
[1] => 20
[2] => 15
)
splat 演算子がない場合、array_map()withmax()は各行の最大値を返します。( [20, 15, 10])
データ構造を転置する splat 演算子を使用すると、各列の最大値が返されます。
コード: (デモ)
$array = [
[0, 20, 5],
[5, 0, 15],
[5, 10, 0]
];
var_export(
array_map('max', ...$array)
);
出力:
array (
0 => 5,
1 => 20,
2 => 15,
)