PHP:Return 来自关联数组中键的值数组
PHP: Return Array of Values from Key in Associative Array
假设我有一个这样的数组:
$people = array(
array(
'name' => 'Bob',
'job' => 'Carpenter'
),
array(
'name' => 'George',
'job' => 'Programmer'
),
array(
'name' => 'Clint',
'job' => 'Actor'
)
);
我想知道所有这些人的名字。
我知道我可以做到:
$names = array();
foreach($people as $person)
$names[] = $person['name'];
但是假设我很懒,所以我为它创建了一个函数:
/**
* Returns an Array of Values paired with the specified $key
* in the $array of Associative Arras.
*
* @param array $array The Array of Associative Arrays.
* @param string $key The Key within each Associative Array to retrieve the Value
*
* @return array The Array of Keyed Values within the Array of Arrays.
*/
function array_keyed_values($array, $key)
{
$values = array();
foreach($array as $associative)
if(array_key_exists($key, $associative))
$values[] = $associative[$key];
return $values;
}
太棒了,我已经正式解决了我的问题。我只需要做:
$names = array_keyed_values($people, 'name');
获得:
(Bob, George, Clint)
我完成了。
但是,我怀疑我是第一个需要这种功能的人。鉴于 PHP 充斥着大量做奇怪事情的古怪函数,我想知道是否已经存在类似的东西。
是的,我知道,我只是通过不编写我需要的函数来为自己节省 10 到 20 行代码,但是在一个使用大量文件的框架中,必须不断地包含一个库来做这件事简单往往会变得有点乏味。
我已经尝试搜索此内容,但我可能没有使用正确的关键字。像这样的东西涉及数组、键和值,所以搜索这种类型的东西往往会不断地指向 array_keys()
or array_values()
,这两者都不是我想要的。
注意:
对于我正在使用的特定应用程序,返回值的顺序 不 重要。
还有,我用的PHP版本是5.3。如果 PHP 的更高版本添加了此功能,请在您的回答中说明。
编辑:
以下 在这种情况下有效:
$result = array_map(function($v) { return $v['name']; }, $people);
但是,我也用它来解决一个类似的问题,我有一个对象数组 (其中对象的嵌套数组,键是变量)。通过稍微修改上面的代码,我也解决了这个问题:
$result = array_map(function($v) { return $v->name; }, $people);
虽然 array_column()
适用于我的场景 (如果我使用 PHP 5.5+ 而不是 PHP 5.3),它不会不适用于上面修改后的解决方案 (因此编辑).
PHP >= 5.5.0:
$result = array_column($people, 'name');
旧版本 >= 5.3.0:
$result = array_map(function($v) { return $v['name']; }, $people);
对于更老的人,只需使用具有具体功能的 array_map
。
假设我有一个这样的数组:
$people = array(
array(
'name' => 'Bob',
'job' => 'Carpenter'
),
array(
'name' => 'George',
'job' => 'Programmer'
),
array(
'name' => 'Clint',
'job' => 'Actor'
)
);
我想知道所有这些人的名字。
我知道我可以做到:
$names = array();
foreach($people as $person)
$names[] = $person['name'];
但是假设我很懒,所以我为它创建了一个函数:
/**
* Returns an Array of Values paired with the specified $key
* in the $array of Associative Arras.
*
* @param array $array The Array of Associative Arrays.
* @param string $key The Key within each Associative Array to retrieve the Value
*
* @return array The Array of Keyed Values within the Array of Arrays.
*/
function array_keyed_values($array, $key)
{
$values = array();
foreach($array as $associative)
if(array_key_exists($key, $associative))
$values[] = $associative[$key];
return $values;
}
太棒了,我已经正式解决了我的问题。我只需要做:
$names = array_keyed_values($people, 'name');
获得:
(Bob, George, Clint)
我完成了。
但是,我怀疑我是第一个需要这种功能的人。鉴于 PHP 充斥着大量做奇怪事情的古怪函数,我想知道是否已经存在类似的东西。
是的,我知道,我只是通过不编写我需要的函数来为自己节省 10 到 20 行代码,但是在一个使用大量文件的框架中,必须不断地包含一个库来做这件事简单往往会变得有点乏味。
我已经尝试搜索此内容,但我可能没有使用正确的关键字。像这样的东西涉及数组、键和值,所以搜索这种类型的东西往往会不断地指向 array_keys()
or array_values()
,这两者都不是我想要的。
注意:
对于我正在使用的特定应用程序,返回值的顺序 不 重要。
还有,我用的PHP版本是5.3。如果 PHP 的更高版本添加了此功能,请在您的回答中说明。
编辑:
以下
$result = array_map(function($v) { return $v['name']; }, $people);
但是,我也用它来解决一个类似的问题,我有一个对象数组 (其中对象的嵌套数组,键是变量)。通过稍微修改上面的代码,我也解决了这个问题:
$result = array_map(function($v) { return $v->name; }, $people);
虽然 array_column()
适用于我的场景 (如果我使用 PHP 5.5+ 而不是 PHP 5.3),它不会不适用于上面修改后的解决方案 (因此编辑).
PHP >= 5.5.0:
$result = array_column($people, 'name');
旧版本 >= 5.3.0:
$result = array_map(function($v) { return $v['name']; }, $people);
对于更老的人,只需使用具有具体功能的 array_map
。