无需使用 foreach 循环获取数组值

12

在这个例子中,有没有一种方法可以不使用foreach循环将所有值都放入一个数组中?

<?php 
$foo = array(["type"=>"a"], ["type"=>"b"], ["type"=>"c"]);

我需要的输出是array("a", "b", "c")

我可以使用类似以下代码实现

$stack = [];

foreach($foo as $value){
  $stack[] = $value["type"];
}

var_dump($stack); 

但是,我正在寻找不涉及使用foreach循环的选项。


你想使用for循环吗? - magnetronnie
@magnetronnie 更糟糕 :) - iOi
2个回答

21
如果您正在使用PHP 5.5+,您可以使用array_column()函数,如下所示:
$result = array_column($foo, 'type');

如果你想要一个带有数字索引的数组,请使用:

$result = array_values(array_column($foo, 'type'));

如果您正在使用早期版本的PHP,并且目前无法升级,您可以使用由相同作者编写的 array_column()函数的用户自定义实现

或者,您也可以使用array_map()。这基本上与循环相同,只是循环没有明确显示。

$result = array_map(function($arr) {
   return $arr['type'];
}, $foo);

1
遗憾的是我没有使用5.5版本,但我应该使用它。 - iOi
1
这里不需要使用array_values(),因为array_column()会返回所需的数组。 - Alma Do
@AlmaDo:我知道。我只是想也许楼主想要一个带有数字索引的数组。 - Amal Murali
array_map 在我看来有点类似于循环。我本来想通过结合 each()array_values() 来实现某些功能,但我猜这是不可能的。无论如何,还是谢谢。 - iOi
@AlmaDo:1. 我是凭记忆打的,打错了:D已经修正了,谢谢!2. 我不会称它为库。这只是一个简单的函数。如果你想看一下代码,请看这里(https://github.com/ramsey/array_column/blob/master/src/array_column.php#L31)。我同意你的观点,升级总是更好的选择。但对于有些人来说,快速升级并不总是可行的。;) - Amal Murali
显示剩余3条评论

5

如果你使用的是PHP 5.5版本,可以使用array_column()方法:

$foo = array(["type"=>"a"], ["type"=>"b"], ["type"=>"c"]);
$result = array_column($foo, 'type');

或者对于之前的版本,可以使用array_map()

$result = array_map(function($x)
{
   return $x['type'];
}, $foo);

注意:循环仍将执行,但它将被隐藏在上述函数中。

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