У меня есть цикл 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
. Что я делаю неправильно?
Прошло некоторое время с тех пор, как я работал с 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);
}
}
)
к оператору if (!array_key_exists)
:)
Попробуйте изменить:
array_push($output[$color], $person);
В:
$output[$color][] = $person;
Из руководства по array_push:
Примечание. Если вы используете array_push(), чтобы добавить один элемент в массив, лучше использовать $ array [] =, потому что таким образом нет накладных расходов на вызов функции.
Примечание: array_push() вызовет предупреждение, если первый аргумент не является массивом. Это отличается от поведения $ var [], когда создается новый массив.
$output[$color][] = $person
?