Загрузка 2 массивов в один объект PHP

#javascript #php #mysql #arrays

#javascript #php #mysql #массивы

Вопрос:

В настоящее время у меня есть подобный код дважды, по одному для каждой таблицы

 $sql = "SELECT * FROM Characters";
$result = mysqli_query($conn, $sql);

if (mysqli_num_rows($result) > 0) {
    
    $dataset = array();
    while($row = mysqli_fetch_assoc($result)) {
        $dataset[]=$row;
    }

} else {
    echo "0 results";
}
  

Это работает, и я получаю 2 отдельных массива из 2 отдельных таблиц. Я хочу знать, как поместить оба этих PHP-массива в объект, подобный тому, который вы видите в JSON. Массив узлов из одной таблицы и массив ссылок из другой таблицы.

 {
 "nodes": [
    {"name": "Bob", "group": 1},
    {"name": "Bill", "group": 2}
 ],
 "links": [
    {"source": "Bill", "target": "Bob", "value": 1}
 ]
}
  

Я видел решения, которые объединяют оба массива, но мне нужно, чтобы они оставались разделенными, и мне нужно, чтобы оба массива находились в одном объекте. Если нет способа сделать это в PHP, есть ли способ, которым я могу отправить оба массива PHP в Javascript, а затем объединить их в объект там? Спасибо

Комментарии:

1. Вам просто нужно поместить оба массива в один ассоциативный массив, который в конце преобразуется в json.

2. Примечание: Объектно-ориентированный интерфейс к mysqli значительно менее подробный, что облегчает чтение и аудит кода, и его нелегко спутать с устаревшим mysql_query интерфейсом, где отсутствие одного i может вызвать проблемы. Пример: $db = new mysqli(…) и $db->prepare("…") процедурный интерфейс является артефактом эпохи PHP 4 и не должен использоваться в новом коде. Кроме того, процедурный интерфейс имеет менее строгую проверку ошибок и отчеты, что затрудняет усилия по отладке.

Ответ №1:

Поместите результаты каждого запроса в отдельные массивы, например $nodes и $links . Затем вы можете объединить их с:

 $results = ["nodes" => $nodes, "links" => $links];
echo json_encode($results);
  

Ответ №2:

Так же просто, как

 $result = [
    'nodes' => $array1,
    'links' => $array2,
];

$jsonResult = json_encode($result);