介绍
为了让您了解,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;
}
现场测试
或 Better Sill 使用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"
现场测试
更复杂的 Senerio
想象一下,您希望您的阵列具有此输出
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
是一种灵活的语言,您始终可以实现自己的版本