добавить значения в многомерный массив

0

У меня есть цикл foreach, который просматривает список элементов. Для каждого из этих элементов у меня есть цикл while, который извлекает данные из базы данных.

$output = array();

//$reference is a multidimensional array has been passed to this page
where the element 'color' contains the color I want.

foreach ($reference as $c) {

  $color = $c['color'];

$query = "SELECT DISTINCT name FROM $table where colorPreference = $color";
$exquery = mysqli_query($con, $customerQuery);

while ($row = mysqli_fetch_array($exquery)) {
$person = $row['person'];
array_push($output[$color], $person);

  }                
}

Таким образом, это циклично, в первый раз ища "красный" и находя 5 человек в фальшивом столе, которые любят красный. Затем "синий", где он находит 1 человека, а затем "зеленый", где он находит 3.

Если я посмотрю на отдельные результаты, у моего первого массива есть "красный, синий, зеленый", а у моего второго массива есть эти списки имен... Я просто не знаю, как добавить их в массив вместе.

Я пытаюсь построить массив следующим образом:

Array
(
  [Red] => Array
      (
          [0] => John
          [1] => Sally
          [2] => Bob
          ...
      )

  [Blue] => Array
      (
          [0] => Luke
      )
  [Green] => Array
      (
          ..etc...       
      )

Я не правильно использую array_push - я получаю Warning: Illegal offset type ошибка Warning: Illegal offset type. Что я делаю неправильно?

  • 1
    $output[$color][] = $person ?
  • 0
    Также проверьте значение $ color. Если это говорит о недопустимом типе смещения, это, вероятно, потому что это объект или нулевое значение.
Теги:
arrays

2 ответа

2
Лучший ответ

Прошло некоторое время с тех пор, как я работал с PHP, но я думаю, вам нужно инициализировать каждый "цветной" массив, в который вы собираетесь входить. Так...

$output = array();

//$reference is a multidimentional array has been passed to this page
where the element 'color' contains the color I want.

foreach ($reference as $c) {

  $color = $c['color'];

  $query = "SELECT DISTINCT name FROM $table where colorPreference = $color";
  $exquery = mysqli_query($con, $customerQuery);

  while ($row = mysqli_fetch_array($exquery)) {
    $person = $row['person'];
    if (!array_key_exists($color, $output)) {
      $output[$color] = array();
    }
    array_push($output[$color], $person);

  }                
}
  • 0
    да, это сделал это. Спасибо вам большое! Вы должны добавить закрытие ) к оператору if (!array_key_exists) :)
  • 0
    @JohnWu: исправил ошибку, которую вы упомянули. :)
0

Попробуйте изменить:

array_push($output[$color], $person);

В:

$output[$color][] = $person;

Из руководства по array_push:

Примечание. Если вы используете array_push(), чтобы добавить один элемент в массив, лучше использовать $ array [] =, потому что таким образом нет накладных расходов на вызов функции.

Примечание: array_push() вызовет предупреждение, если первый аргумент не является массивом. Это отличается от поведения $ var [], когда создается новый массив.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню