序章
あなたが理解するRFC
ためには、最初に問題とそれが導入された理由を理解する必要があります。
あなたのアレイ
$arr = array(
array(
'firstname' => 'Bob', <--
'lastname' => 'Tomato' | <--
), | |
array( | |
'firstname' => 'Larry', <-- |
'lastname' => 'Cucumber' <-|
)
);
列の取得
取得する、Bob & Larry
またはTomato and Cucumber
複数行のコード例を使用している場合は、次のとおりです。
$colums = array();
foreach ( array_map(null, $arr[0], $arr[1]) as $value ) {
$colums[] = $value;
}
print_r($colums);
出力
Array
(
[0] => Array
(
[0] => Bob
[1] => Larry
)
[1] => Array
(
[0] => Tomato
[1] => Cucumber
)
)
動的バージョン
上記のコードは、別の創造的な方法である要素の数を知っている場合にのみ機能します
$colums = array();
array_unshift($arr, null);
foreach (call_user_func_array("array_map", $arr) as $value ) {
$colums[] = $value;
}
ライブテスト
またはより良い敷居の使用MultipleIterator
$mi = new MultipleIterator(MultipleIterator::MIT_NEED_ALL);
foreach ( $arr as $v ) {
$mi->attachIterator(new ArrayIterator($v));
}
$colums = array();
foreach ( $mi as $v ) {
$colums[] = $v;
}
print_r($colums);
ライブテスト
キー名
ここでキー名を取得する必要がある場合は、別の方法です
$colums = array_reduce($arr, function ($a, $b) {
foreach ( $b as $k => $v ) {
$a[$k][] = $v;
}
return $a;
});
ライブテスト
戻るarray_column
array_column
単純にプロセスを意図しており、名の付いたすべての列を取得するのは次のように簡単です。
print_r(array_column($arr,"lastname"));
^
|
+--- This get value with key "lastname"
ライブテスト
より複雑なセネリオ
配列にこの出力を持たせたいと想像してください
Array
(
[Bob] => Tomato
[Larry] => Cucumber
)
あなたが持つことができる古い方法を使用してください
$colums = array();
array_unshift($arr, null);
foreach (call_user_func_array("array_map", $arr) as $value ) {
$key = array_shift($value);
$colums[$key] = current($value);
}
print_r($colums);
ライブテスト
これで、私が使用array_shift
しなければならなかったことがわかりcurrent
、最初の2つの要素を取得する必要がありました..配列が大きくなるにつれて、これは複雑になる可能性がありますが、これarray_column
を単純化するでしょう
print_r(array_column($arr,"lastname","firstname"));
^ ^
| |
Value Key (I wonder why position is backwards)
出力
Array
(
[Bob] => Tomato
[Larry] => Cucumber
)
最後に質問に戻ります
What will be returned if a named key doesn't exist?
空の配列...あなたの例から
print_r(array_column($arr,"middlename"));
^
|
it would try to check if any of your array has key middle man
戻ります
Array <------- Otherwise returns empty array
(
)
結論
、、を使用してさまざまな例を使用しloop
、何を達成しようとしているのかを説明しました。array_map
array_reduce
MultipleIterator
array_column
ご覧のとおりarray_column
、はるかに単純化されていますが、RFCの例を少し試してみることをお勧めします。これにより、まだ理解していない場合でも理解しやすくなります。これPHP
は、いつでも独自のバージョンを実装できる柔軟な言語です。