Почему я получаю многоуровневый массив?

#php #arrays

#php #массивы

Вопрос:

Мне нужен массив со списком имен, поэтому я просто получаю их из базы данных, но когда я распечатал массив, я заметил, что он хранит каждое имя в отдельном массиве. Почему это так, и как я могу просто сохранить их в одном?

Мой код:

 <?
//  Product names
$producten             = "SELECT `naam` FROM `producten`";
$productencon          = $conn->query($producten);
$productencr           = array();
while ($productencr[] = $productencon->fetch_array());
echo '<pre>';
print_r($productencr);
echo '</pre>';
?>
  

Вывод этого печатного массива таков:

введите описание изображения здесь

Ответ №1:

Потому что fetch_array вернет как ассоциативное имя столбца, так и числовой индекс.

Если вам нужно только имя столбца, вы должны использовать: fetch_assoc или если вам нужно только числовое значение, вы должны использовать fetch_row

fetch_array является комбинацией обоих fetch_assoc и fetch_row

Если вы хотите сохранить fetch_array , вы также можете указать в качестве первого параметра тип результата. По умолчанию MYSQLI_BOTH .

Подробнее смотрите здесь:http://php.net/manual/en/mysqli-result .fetch-array.php

Комментарии:

1. Хорошо, это имеет смысл, но когда я меняю его на fetch_assoc , он по-прежнему помещает каждое имя в отдельный массив. Только без числовых значений

2. @twan Да, именно так это и работает. Потому что вы можете выбрать несколько столбцов из базы данных.

3. Есть ли простой способ собрать все имена в один массив?

4. Я исправил это сам, используя array_map('current', $productencr) Спасибо, что помогли мне на этом пути!

Ответ №2:

Попробуйте это

 $output=array();
while ($productencr = $productencon->fetch_array()){
    $output[]=$productencr["naam"];
}
echo '<pre>';
print_r($output);
echo '</pre>';