У меня возникли проблемы, обертывая мою голову вокруг, любая помощь будет БОЛЬШОЙ …
У меня есть массив $ stores, который структурирован так:
Array ( [0] => Array ( [id] => 123 [name] => 'Store A' ) [1] => Array ( [id] => 345 [name] => 'Store B' ) [2] => Array ( [id] => 567 [name] => 'Store C' ) [3] => Array ( [id] => 789 [name] => 'Store D' ) )
Я хочу извлечь значения id из этого массива в простой массив, который выглядит так:
$simple = array(123,345,567,789);
Если вы используете php 5.5+, array_column () весьма полезен:
$simple = array_column($yourarray,'id');
Calimero
определенно был лучший ответ для PHP 5.5+, но если вы хотите иметь такую же функциональность в предыдущих версиях, проверьте этот репозиторий: https://github.com/ramsey/array_column . Он написан самим создателем PHP 5.5 array_column
.
Если вы не можете использовать array_column
, вы можете использовать array_map
:
$names = array( array('id' => 123, 'name' => 'A'), array('id' => 456, 'name' => 'B'), array('id' => 789, 'name' => 'C'), ); $ids = array_map(function ($name) { return $name['id']; }, $names); var_dump($ids); // output array(3) { [0] => int(123) [1] => int(456) [2] => int(789) }
Вы можете просто использовать следующий синтаксис, если вы не можете обновить версию php. В этом случае используйте
if (!function_exists('array_column'))
чтобы предотвратить повторное объявление функции, которая может возникнуть при обновлении версии.
Описание С php.net
array_column () возвращает значения из одного столбца массива, идентифицированного с помощью column_key. При желании вы можете указать index_key для индексации значений в возвращаемом массиве значениями из столбца index_key во входном массиве.
/* Function array_column equivalent to php's array_column */ if (!function_exists('array_column')) { function array_column(array $array, $column_key, $index_key = NULL) { if (isset($array)) { $return = array(); foreach ($array as $a) { if ($index_key) { if (!isset($a[$index_key])) { return array(); } else { $return[$a[$index_key]] = $a[$column_key]; } } else { $return[] = $a[$column_key]; } } return $return; } return array(); } }
Вот несколько примеров, взятых из PHP.NET
<?php $records = array( array( 'id' => 2135, 'first_name' => 'John', 'last_name' => 'Doe', ), array( 'id' => 3245, 'first_name' => 'Sally', 'last_name' => 'Smith', ), array( 'id' => 5342, 'first_name' => 'Jane', 'last_name' => 'Jones', ), array( 'id' => 5623, 'first_name' => 'Peter', 'last_name' => 'Doe', ) ); $first_names = array_column($records, 'first_name'); print_r($first_names); ?>
Это даст ниже выход:
Array ( [0] => John [1] => Sally [2] => Jane [3] => Peter )
Получить столбец с именами из набора записей, индексированный столбцом «id»
<?php $last_names = array_column($records, 'last_name', 'id'); print_r($last_names); ?>
Он даст вам выход, как показано ниже:
Array ( [2135] => Doe [3245] => Smith [5342] => Jones [5623] => Doe )
$simple = []; foreach ($stores as $store){ $simple[] = $store['id']; }