如何在PHP中展开数组?

9

我有一个包含4个数组的数组,每个数组只包含一个值。

array(4) {
  [0]=>
  array(1) {
    ["email"]=>
    string(19) "test01@testmail.com"
  }
  [1]=>
  array(1) {
    ["email"]=>
    string(19) "test02@testmail.com"
  }
  [2]=>
  array(1) {
    ["email"]=>
    string(19) "test03@testmail.com"
  }
  [3]=>
  array(1) {
    ["email"]=>
    string(19) "test04@testmail.com"
  }
}

什么是最佳(首选本地PHP函数)展平数组的方法,以便它只包含电子邮件地址作为值:

array(4) {
  [0]=>
  string(19) "test01@testmail.com"
  [1]=>
  string(19) "test02@testmail.com"
  [2]=>
  string(19) "test03@testmail.com"
  [3]=>
  string(19) "test04@testmail.com"
}
2个回答

21

在 PHP 5.5 中,您可以使用 array_column 函数:

$plucked = array_column($yourArray, 'email');
否则,请使用array_map
$plucked = array_map(function($item){ return $item['email'];}, $yourArray);

2
或者如果您没有 PHP 5.5,您可以使用 array_column 的用户空间实现 https://github.com/ramsey/array_column,这是由官方函数的作者开发的。 - Populus
很好,正是我想要的。谢谢! - Gottlieb Notschnabel
自 PHP 7.4 开始,您可以使用箭头函数使其更加紧凑:$plucked = array_map(static fn($item) => $item['email'], $yourArray); - Marcin Orlowski

2
您可以使用 RecursiveArrayIterator。它可以把多层嵌套的数组变成扁平化的形式。
<?php
$arr1=array(0=> array("email"=>"test01@testmail.com"),1=>array("email"=>"test02@testmail.com"),2=> array("email"=>"test03@testmail.com"),
    3=>array("email"=>"test04@testmail.com"));
echo "<pre>";
$iter = new RecursiveIteratorIterator(new RecursiveArrayIterator($arr1));
$new_arr = array();
foreach($iter as $v) {
    $new_arr[]=$v;
}
print_r($new_arr);

输出:

Array
(
    [0] => test01@testmail.com
    [1] => test02@testmail.com
    [2] => test03@testmail.com
    [3] => test04@testmail.com
)

也是不错的方法,但我更喜欢 @moonwave99 的答案,因为它只有一行。 - Gottlieb Notschnabel
@GottliebNotschnabel,没问题。我建议这个作为一个通用的解决方案,因为它甚至可以在多维数组上工作。 - Shankar Narayana Damodaran

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接