gpt4 book ai didi

php - 如果键名不存在,array_column 会返回什么?

转载 作者:可可西里 更新时间:2023-11-01 13:10:20 28 4
gpt4 key购买 nike

根据 https://wiki.php.net/rfc/array_column array_column 计划很快添加到 PHP 中。但我无法理解 RFC。如果命名键不存在,将返回什么?

示例:

$arr = array(
array(
'firstname' => 'Bob',
'lastname' => 'Tomato'
),
array(
'firstname' => 'Larry',
'lastname' => 'Cucumber'
)
);

$middlenames = array_column($arr, 'middlename');

最佳答案

简介

要理解 RFC,您首先需要了解问题及其引入的原因。

你的数组

$arr = array(
array(
'firstname' => 'Bob', <--
'lastname' => 'Tomato' | <--
), | |
array( | |
'firstname' => 'Larry', <-- |
'lastname' => 'Cucumber' <-|
)
);

获取列

要获得 Bob & LarryTomato and Cucumber,您使用了不止一行代码示例:

$colums = array();
foreach ( array_map(null, $arr[0], $arr[1]) as $value ) {
$colums[] = $value;
}
print_r($colums);

Output

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;
}

Live Test

或者更好的方法是使用 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);

Live Test

key 名称

如果需要获取键名这里是另一种方法

$colums = array_reduce($arr, function ($a, $b) {
foreach ( $b as $k => $v ) {
$a[$k][] = $v;
}
return $a;
});

Live Test

返回array_column

array_column 旨在简单地处理并获取具有名字的所有列将像以下一样简单:

 print_r(array_column($arr,"lastname"));
^
|
+--- This get value with key "lastname"

Live Test

更复杂的 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);

Live Test

现在您可以看到我必须使用 array_shiftcurrent 来获取前 2 个元素.. 随着数组的增长,这可能会变得复杂,但是 array_column 会简化这个

print_r(array_column($arr,"lastname","firstname"));
^ ^
| |
Value Key (I wonder why position is backwards)

Output

Array
(
[Bob] => Tomato
[Larry] => Cucumber
)

终于回到你的问题

如果命名键不存在,将返回什么?

空数组......来自你的例子

 print_r(array_column($arr,"middlename"));
^
|
it would try to check if any of your array has key middle man

It returns

Array        <------- Otherwise returns empty array 
(
)

结论

我使用了很多不同的示例,使用 looparray_maparray_reduceMultipleIterator 来解释什么 array_column 正在努力实现。

如您所见,array_column 更加简化,但 i would advice you play with the examples in the RFC如果您仍然不理解它,这会让您更好地理解它,PHP 是一种灵活的语言,您可以随时实现自己的版本

关于php - 如果键名不存在,array_column 会返回什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15348333/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com