У меня есть небольшая проблема, которую я не могу легко понять. Исправление, вероятно, довольно просто, но я слишком много нуб, чтобы исправить это сам. Возможно, вы, ребята, могли пролить свет на это.Создание асимметричного многомерного массива в PHP
Вопрос
Мне нужно создать многомерный массив в PHP. Это прекрасно работает. Тем не менее, последний вложенный массив иногда состоит из 2-х элементов, иногда 3. Следовательно, «асимметричный» в заголовке этого сообщения.
Проблема, скорее всего, вызвана созданием вложенного массива на основе переменных коммутатора в моем PHP-коде. Когда переменная не определена ($button
в case 'inactive'
например), ключ помещается внутри массива $elements
в любом случае, но без значения.
РНР код
$player = Array();
$data = @$_POST['players'];
if (!empty($data) && is_array($data)) {
foreach($data as $id){
$player_info = mysqli_query($connection, "SELECT * FROM players WHERE id = '$id'");
$player_info = mysqli_fetch_assoc($player_info);
switch ($player_info['status']) {
case 'active':
$color = '#30B490';
$status = 'active';
$button = 'buttons';
break;
case 'inactive':
$color = '#A1A1A1';
$status = 'inactive';
break;
case 'standby':
$color = '#F0AD4E';
$status = 'standby';
$button = 'buttons';
break;
default:
$color = '#4FA1D9';
$status = 'unknown';
break;
}
// THIS PART SEEMS TO CAUSE MY ISSUE
$elements = array(
"indicator" => $color,
"status" => $status,
"button" => $button
);
// THIS PART SEEMS TO CAUSE MY ISSUE
foreach ($elements as $label => $element) {
$player[$id][$label] = $element;
}
}
}
print_r($player);
print_r() Результаты
В настоящее время
Array (
[1] => Array (
[indicator] => #A1A1A1
[status] => inactive
[button] =>
)
[2] => Array (
[indicator] => #30B490
[status] => active
[button] => yes
)
[3] => Array (
[indicator] => #4FA1D9
[status] => standby
[button] => yes
)
)
Что должно быть
Array (
[1] => Array (
[indicator] => #A1A1A1
[status] => inactive
)
[2] => Array (
[indicator] => #30B490
[status] => active
[button] => yes
)
[3] => Array (
[indicator] => #4FA1D9
[status] => standby
[button] => yes
)
)
Вы можете увидеть разницу между двумя результатами. Посмотрите на [button] =>
. Когда я json_encode() весь многомерный массив, результат показывает значение null
, которое просто не кажется правильным.
{"1":{"indicator":"#A1A1A1","status":"inactive","button":null},"2":{"indicator":"#30B490","status":"active","button":"buttons"},"3":{"indicator":"#4FA1D9","status":"unknown","button":"buttons"}}
То, что я хотел бы
Я хотел бы многомерный массив, чтобы быть чистым (без пустых значений), как показано на «что должно быть» print_r()
результат.
Любая идея, что я должен изменить в своем PHP-коде, чтобы создать правильный многомерный массив?
С наилучшими пожеланиями, Питер де Leeuw
Любая идея, как я могу «динамически» решение для каждого '$ id', что размер следующего массива должен быть? (2 или 3 клавиши). Действительно, теперь я создаю 3 ключевых вложенных массива для каждого '$ id', хотя в некоторых случаях требуется только 2 ключа во вложенном массиве. * Я только что заметил, что вы отредактировали свой пост, я проверю его. –
Новое редактирование идет даже с меньшей кодовой базой –
Ваша первая редакция, похоже, сработала! Теперь массивы чисты, нет пустых значений; как выглядит результат 'print_r()'. С другой стороны, я попробую другой подход. –