Преобразование ассоциативного массива строк в плоский массив целых чисел (только значения)


Я не могу понять, как получить массив 1 и сделать его похожим на массив 2, чтобы я мог отправить его в качестве параметров для моего метода подготовленных операторов.

Массив 1: (то, что у меня сейчас есть)

array(5) { [0]=> array(2) { ["id"]=> string(1) "1" [0]=> string(1) "1" } [1]=> array(2) { ["id"]=> string(3) "314" [0]=> string(3) "314" } [2]=> array(2) { ["id"]=> string(3) "315" [0]=> string(3) "315" } [3]=> array(2) { ["id"]=> string(3) "316" [0]=> string(3) "316" } [4]=> array(2) { ["id"]=> string(3) "317" [0]=> string(3) "317" } } 

Массив 2: то, что я пытаюсь сделать. (пожалуйста, не обращайте внимания, что 1 пункт отсутствует)

array(4) { [0]=> int(314) [1]=> int(315) [2]=> int(316) [3]=> int(317) }

Я пытаюсь сделать это в PHP php7. 1, если это имеет значение.

Я думаю, что это достаточная информация, но если ее нет, пожалуйста, дайте мне знать. Я просто не хотел, чтобы вы увязли со всем этим. какие-то коды и объяснения, в которых я не уверен, что вы нуждаетесь.

То, что я пробовал до сих пор (хотя, возможно, не совсем правильно):

$category_ids2 = array_values($category_ids);
3 2

3 ответа:

Есть функция для извлечения одного столбца, а другого для преобразования в integer:

$category_ids = array_map('intval', array_column($category_ids, 'id'));

Без array_column:

$category_ids = array_map(function($v) { return (int)$v['id']; }, $category_ids);

Однако это выглядит подозрительно похоже на результаты базы данных. Если да, то просто постройте массив так, как вы хотите при получении результатов. Кроме того, используя fetch assoc из вашей библиотеки баз данных будет исключен индекс 0 в каждом массиве.

$array = [['id' => '1', '0' => '1'], 
      ['id' => '314', '0' => '314'],
      ['id' => '315', '0' => '315'],
      ['id' => '316', '0' => '316'],
      ['id' => '317', '0' => '317']];

echo "<pre>";

$ids = array_column($array, 'id');


unset($ids['0']); 
var_dump($ids);

$integerIDs = array_map('intval', $ids);

var_dump($integerIDs);

Пояснение:

  1. Вы должны использовать array_column для получения идентификаторов http://php.net/manual/en/function.array-column.php
  2. затем сбросить, если нулевая позиция не требуется
  3. array_map('intval', $ids); все значения будут преобразованы в int

Сначала используйте array_column для выравнивания массива. Затем объедините array_map с помощью intval привести строки к целым числам. Все вместе:

$category_ids2 = array_map('intval', array_column($category_ids, 'id'));