Есть ли способ получить все значения в одном массиве без использования циклов 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.
Если вы используете PHP 5.5+, вы можете использовать array_column()
, например:
$result = array_column($foo, 'type');
Если вам нужен массив с числовыми индексами, используйте:
$result = array_values(array_column($foo, 'type'));
Если вы используете предыдущую версию PHP и не можете выполнить обновление на данный момент, вы можете использовать функцию Userland функции array_column()
написанную тем же автором.
Кроме того, вы также можете использовать array_map()
. Это в основном то же самое, что и цикл, за исключением того, что цикл не показан явно.
$result = array_map(function($arr) { return $arr['type']; }, $foo);
Либо используйте array_column()
для PHP 5.5:
$foo = array(["type"=>"a"], ["type"=>"b"], ["type"=>"c"]); $result = array_column($foo, 'type');
Или используйте array_map()
для предыдущих версий:
$result = array_map(function($x) { return $x['type']; }, $foo);
Примечание. Петля все равно будет выполняться, но она будет скрыта внутри вышеупомянутых функций.