Ассоциативные массивы php array_merge

Я пытаюсь добавить элемент в начало ассоциативного массива. Я подумал, что лучший способ сделать это - использовать array_merge, но у меня странные последствия. Я получаю идентификатор и имя продуктов из базы данных mysql, и они возвращаются в виде ассоциативного массива, как это (не возвращаются фактические данные, а образцовые данные для этого вопроса, которые приблизительно представляют, как данные выглядят):

$products = array (1 => 'Product 1', 42 => 'Product 42', 100 => 'Product 100');

это отправляется помощнику html для создания раскрывающегося списка, которое связывает ключ со значением, а значение элемента массива устанавливается как текст в раскрывающемся элементе управления выбором. Мне нужно, чтобы первым элементом было что-то вроде «Пожалуйста, выберите» с ключом 0, поэтому я сделал следующее:

$products = array_merge(array(0 => "Select a product" ), $products);

Результирующий массив выглядит так:

array(
  0 => 'Select a product', 
  1 => 'Product 1', 
  2 => 'Product 42', 
  3 => 'Product 100' 
);

когда Я действительно хотел не потерять ключи ассоциативный массив. Мне сказали, что вы можете правильно использовать array_merge с ассоциативными массивами так, как я пытался, однако: Я считаю, что, поскольку мои ключи ints , он не обрабатывает массив как истинно ассоциативный массив и не сжимает их, как показано выше.

Возникает вопрос: почему функция array_merge изменяет ключи элементов? могу я удержать его от этого? ИЛИ есть ли другой способ выполнить то, что я пытаюсь сделать, добавить новый элемент в начало массива?

23
задан JakeGould 30 October 2018 в 19:17
поделиться