【问题标题】:Get specific element from each sub array从每个子数组中获取特定元素
【发布时间】:2012-04-22 13:32:20
【问题描述】:

我有一个常见的模式,我确信 PHP 中必须有一个内置的数组函数来处理,但就是看不到它。

我有多个数组,如下所示:

$testArray = array (
    'subArray1' => array(
        'key1' => "Sub array 1 value 1",
        'key2' => "Sub array 1 value 1"
    ),
    'subArray2' => array(
        'key1' => "Sub array 2 value 1",
        'key2' => "Sub array 2 value 2"
    )
);

我需要从每个子数组中获取key1 值,其中可以有任意数量。

我总是最终只是循环遍历每个数组以获得所需的值,但我确信必须有一种更简单、更有效的方法来处理这个问题。

我目前正在使用以下简单的 foreach 来解析数组:

$preparedSubs = array();

foreach($testArray as $subArray) {
    $preparedSubs[] = $subArray['key1'];
}

它尽可能短,但正如我所说,我确信有一个 PHP 构造可以更好地处理这个问题。

【问题讨论】:

  • 您想从每个 subArray 中获取 key1 值并将其存储到另一个数组中?
  • @Rohan - 最好是属于该键的值,或者键和值一起。我将发布当前使用的 foreach 循环

标签: php arrays


【解决方案1】:

在 PHP 5.5 之前,这将是最有效的解决方案:

$key = 'key1';

$output = array_map(function($item) use ($key) {
    return $item[$key];
}, $testArray);

从 PHP 5.5 开始,现在有一个 array_column 函数(请参阅 COil's answer)。

【讨论】:

  • 注意:PHP Closures 从 php 5.3 开始支持,所以这个方法从 5.3 开始就可以了,在 5.5 之后就不需要了
  • 下面的答案也有效:) 它更简单谢谢
  • 这个问题是在 PHP 5.5 发布之前提出的。我更新了我的问题以反映 3 年后添加 COil 的答案时:-)
【解决方案2】:

从 PHP 5.5 开始,您可以使用 array_column() 函数:

$key = 'key1';

$testArray = array (
    'subArray1' => array(
        'key1' => "Sub array 1 value 1",
        'key2' => "Sub array 1 value 2"
    ),
    'subArray2' => array(
        'key1' => "Sub array 2 value 1",
        'key2' => "Sub array 2 value 2"
    )
);

$output = array_column($testArray, $key);
var_dump($output);

将输出:

array(2) {
  [0]=>
  string(19) "Sub array 1 value 1"
  [1]=>
  string(19) "Sub array 2 value 1"
}

与接受的答案的唯一区别是您丢失了原始密钥名称,但我认为这对您来说不是问题。

【讨论】:

  • +1 表示新的原生函数。您可以使用array_combine(array_keys($testArray), array_column($testArray, $key)) 保留原始密钥。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-06-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-06-12
  • 2011-07-30
  • 1970-01-01
相关资源
最近更新 更多