【发布时间】:2012-05-26 10:56:10
【问题描述】:
我确定这个问题以前有人问过,很抱歉没有先找到它。
原始数组:
[0] => Array
(
[categoryId] => 1
[eventId] => 2
[eventName] => 3
[vendorName] => 4
)
[1] => Array
(
[categoryId] => 5
[eventId] => 6
[eventName] => 7
[vendorName] => 8
)
[2] => Array
(
[categoryId] => 9
[eventId] => 10
[eventName] => 11
[vendorName] => 12
)
我希望的结果来自:print_r(get_values_from_a_key_in_arrays('categoryId', $array));
[0] => 1
[1] => 5
[2] => 9
我只是在寻找比编写自己的基于 foreach 的函数更干净的东西。如果 foreach 是答案,我已经准备好了。
编辑:我不想使用硬编码的密钥,我只是展示了一个对解决方案的调用示例。谢谢! ^_^
PHP 5.3 的快速抓取解决方案:
private function pluck($key, $data) {
return array_reduce($data, function($result, $array) use($key) {
isset($array[$key]) && $result[] = $array[$key];
return $result;
}, array());
}
【问题讨论】:
-
这被称为
plucking,不是默认的 PHP 函数。不过,您可以轻松地自己编写。 -
真的很酷。我以前做过,但我从来不知道它的技术名称是
plucking。 -
这很好,但
array_reduce()是错误的函数。它旨在“将数组减少为单个值”。在其他语言中也是如此。您应该使用array_map()或array_walk()重写...这也将简化代码。 -
@doublejosh 我不同意。
array_reduce在这里很好。它将数组数组简化为值数组。 -
内层操作确实是reduce,我在抱怨使用的时候肯定是看外层操作了。
标签: php arrays associative-array array-reduce pluck