PHP: цикл foreach с array_merge для создания объектов json
Я новичок в php, но мне очень нравится, пока! Теперь я наткнулся на проблему с array_merge
,
Это мой код, он просто захватывает каждую таблицу, указанную в моей базе данных, а затем превращается в большой файл JSON.
$tables = array("buildings", "medical", "other", "tools", "traps", "weapons");
foreach ($tables as $table) {
// Get tables from database
$sth = $db->query("SELECT * FROM $table");
$result = $sth->fetchAll();
// Merge arrays together
if ($arr === null) {
//echo "its 0 <br/> ";
$arr = array( "$table" => $result );
} else {
//echo "more than 0 <br/> ";
$arr2 = array( "$table" => $result );
$merge = array_merge($arr, $arr2);
}
} //End loop
echo $merge;
Пока это работает как-то, мне удается заставить первый стол "здания" и последний стол "оружие" отображаться так, как я хочу идеально!
Но я не понимаю, почему это перепрыгивает через другие.. Я считаю, что это как-то связано с $arr2
и что мне нужно указать уникальный массив для каждой из таблиц. Но как мне этого добиться? Это путь или есть более эффективный способ достичь этого? Спасибо!
5 ответов
Это терпит неудачу из-за этой линии
$merge = array_merge($arr, $arr2);
Ваше слияние всегда является слиянием $arr (который является первой записью в $tables) и $arr2, который является последней обрабатываемой записью. Вы не объединяете данные с ранее объединенными данными, такими как
$arr = array_merge($arr, $arr2)
Кроме того, вы можете избавиться от логики if/else, просто начав с установки $ arr в пустой массив для запуска.
$arr = array();
Вы можете поместить все в уникальный массив, например:
$myArray["$table"] = $result;
Если я правильно понимаю...
Вместо этого две строки
$arr2 = array( "$table" => $result );
$merge = array_merge($arr, $arr2);
Вы можете попробовать это:
$tables[$table] = $result;
$tables = array("buildings", "medical", "other", "tools", "traps", "weapons");
$tableArr = array();
foreach ($tables as $table) {
// Get tables from database
$sth = $db->query("SELECT * FROM $table");
$result = $sth->fetchAll();
if(isset($result)){
$tableArr[$table] = $result;
}else{
$tableArr[$table] = '';
}
} //End loop
print_r($tableArr);
Создайте новый массив и установите индекс в качестве имени таблицы и сохраните его результат в этом массиве.
Ваш код может быть значительно упрощен.
$tables = array("buildings", "medical", "other", "tools", "traps", "weapons");
foreach ($tables as & $table) {
$table = $db->query("SELECT * FROM $table")->fetchAll();
}
echo json_encode($tables);
Конечно, вам все еще нужно проверять ошибки (ошибки базы данных и JSON), чтобы код был надежным, но чем проще, тем лучше. Простое это хорошо, особенно когда дело доходит до программирования.