关于array_column
PHP的
的PHP
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | // このような多次元配列から… $array = [ 2 => [ 'id' => 111, 'name' => 'suzuki', 'age' => 21 ], 3 => [ 'id' => 222, 'name' => 'sato', 'age' => 34 ], 5 => [ 'id' => 333, 'name' => 'tanaka', 'age' => 55 ], ]; // 単一のカラム値の配列を作れる var_export( array_column( $array, 'name' ) ); // array ( // 0 => 'suzuki', // 1 => 'sato', // 2 => 'tanaka', // ) |
但是,返回数组的键是
-
如果未指定第三个参数:只需从0重新分配
-
当指定第三个参数时:指定列的值用作键
的任何一个都不保留原始数组的键(在上面的示例中为" 2"," 3"," 5")。
当您想要保留原始阵列的键
我们将介绍以下三种方法。
-
方法①将
array_column 与其他功能组合 -
方法②使用
array_map -
方法③使用
foreach
* 2020/10/14在第一次发布本文时,仅介绍了方法(1),但除了@tadsan在注释部分中介绍的方法(2)外,还使用了foreach方法③也已添加。此外,摘要的内容已更改,并添加了
方法(1)将array_column 与其他功能组合
使用
的PHP
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | $array = [ 2 => [ 'id' => 111, 'name' => 'suzuki', 'age' => 21 ], 3 => [ 'id' => 222, 'name' => 'sato', 'age' => 34 ], 5 => [ 'id' => 333, 'name' => 'tanaka', 'age' => 55 ], ]; // キーを配列として取得 $keys = array_keys( $array ); // => [ 2, 3, 5 ] // 指定要素を配列として取得 $values = array_column( $array, 'name' ); // => [ 'suzuki', 'sato', 'tanaka' ] // それぞれの配列を合体 $combined = array_combine( $keys, $values ); // 出力 var_export( $combined ); // array ( // 2 => 'suzuki', // 3 => 'sato', // 5 => 'tanaka', // ) |
可以将以下操作写在一行中。
的PHP
1 | array_combine( array_keys( $array ), array_column( $array, 'name' ) ); |
-
优点:很容易理解您使用功能的方式
-
缺点:许多函数调用
方法②使用array_map
尽管文章说"我想使用
(从评论部分复制并粘贴)
1 2 3 4 5 6 7 | $array = [ 2 => [ 'id' => 111, 'name' => 'suzuki', 'age' => 21 ], 3 => [ 'id' => 222, 'name' => 'sato', 'age' => 34 ], 5 => [ 'id' => 333, 'name' => 'tanaka', 'age' => 55 ], ]; var_dump(array_map(fn($a) => $a['name'], $array)); |
提取以上代码的数组操作部分如下。
(从评论部分复制并粘贴)
1 | array_map(fn($a) => $a['name'], $array); |
由于
的PHP
1 | array_map( function ($a) { return $a['name']; }, $array ); |
-
优点:可以在可以使用箭头功能的环境中进行简洁描述
-
缺点:在一个内衬中使用匿名函数时,可读性稍差
方法③使用foreach
直到那时,如果我被问到"是否存在
的PHP
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | $array = [ 2 => [ 'id' => 111, 'name' => 'suzuki', 'age' => 21 ], 3 => [ 'id' => 222, 'name' => 'sato', 'age' => 34 ], 5 => [ 'id' => 333, 'name' => 'tanaka', 'age' => 55 ], ]; $result = []; foreach ( $array as $key => $values ) { $result[ $key ] = $values['name']; } var_export( $result ); // array ( // 2 => 'suzuki', // 3 => 'sato', // 5 => 'tanaka', // ) |
-
优点:乍看之下容易理解
-
缺点:需要临时变量,代码跨多行
摘要
建议使用方法②的
- 如何将其放在一行①
- 如何使任何人都容易看到的代码③
我认为
很好。我最后得出的结论与文章标题不符。
蛇纹石
除此之外,似乎还有一个"建议在第三个参数中指定true时保留原始数组的键",而且似乎甚至在发布后对此提案也有一些要求(一个问题在用PHP实现的array_column存储库中)。
但是,在PHP官方网站的此页面上(由于某种原因,←很难连接),进行了任何更改,例如"为第3个参数指定true的计划"和"第4个参数添加计划"。
参考
array_column --PHP.net 1