foreach
よりもクリーンな方法ですべての「ラベル」値の配列を取得できますか?
$methods[0]['label'] = 'test';
$methods[0]['nr'] = 99;
$methods[1]['label'] = 'whatever';
$methods[1]['nr'] = 10;
foreach($methods as $method) {
$methodsLabel[] = $method['label'];
}
PHP 5.5+の時点で、これはまさにそれです array_column()
=します:
$methodsLabel = array_column($methods, 'label');
http://php.net/manual/function.array-column.php
3v4lの例: https://3v4l.org/ZabAb
いいえ、実装したコードよりも速い方法はありません。他のすべてのメソッドは、関数呼び出しのオーバーヘッドのために遅くなります。小さな配列の場合、違いはわずかですが、大きな配列(実装によっては100メンバー程度)の場合、違いは非常に大きくなる可能性があります...
array_map
することもできますが、上記で投稿した生のPHP)を使用します...保守が簡単で、私見が読みやすくなります...
結局のところ、どれを教えてください一目でそれがもっと何をするかを教えてくれます:
$results = array();
foreach ($array as $value) {
$results[] = $value['title'];
}
vs
$results = array_map(function($element) {
return $element['title'];
},
$array
);
または:
$callback = function($element) {
return $element['title'];
}
$results = array_map($callback, $array);
個人的には、最初のものが私にとって最善です。それが何をしているのか何も知らなくてもすぐにわかります。他の人は理解するためにarray_map
セマンティクスの知識を必要とします。それをarray_map
が遅いという事実と組み合わせると、foreach
の二重の勝利になります。
コードは必要なだけエレガントにする必要があります。それは何よりも読みやすいはずです...
確かに、使用してください array_map
:
function getLabelFromMethod($method) {
return $method['label'];
}
$labels = array_map('getLabelFromMethod', $methods);
PHP 5.3+を使用している場合は、ラムダ関数を使用することもできます。
$labels = array_map(function($m) {
return $m['label'];
}, $methods);
array_map('array_shift', $methods);
ここでは、ラベルが各配列の最初の要素になると想定しています。
PHP 5.3+では、array_mapと組み合わせた無名関数を使用できます。
$methodsLabel = array_map(function($item) { return $item['label']; }, $methods);
Labelが配列の最初の要素である場合、 array_map の "current"は正常に機能します。
array_map('current', $methods);
矢印関数 はPHP 7.4に導入されました。これにより、これが少しクリーンになります。
$methodsLabel = array_map(fn($x) => $x['label'], $methods)