Создание массива json из запроса mysql

#php #json

#php #json

Вопрос:

Я пытаюсь выполнить следующий код:

 $order = array(); $imageURL = array(); $name = array();
        while($row = mysql_fetch_array($mysql->result)) {
            $order[] = $row["order"]; 
            $imageURL[] = $row["imageURL"];
            $name[] = $row["name"];
        }
        $res = array($order, $imageURL,$name);
        return json_encode($res);
  

Но он не выводится в формате json, есть идеи?

Вывод:

 [["1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19","20","21","22","23","24","25","26","27","28","29","30"],["previews/en-1-1.gif","previews/en-1-2.gif","previews/en-1-3.gif","previews/en-1-4.gif","previews/en-1-5.gif","previews/en-1-6.gif","previews/en-1-7.gif","previews/en-1-8.gif","previews/en-1-9.gif","previews/en-1-10.gif","previews/en-1-11.gif","previews/en-1-12.gif","previews/en-1-13.gif","previews/en-1-14.gif","previews/en-1-15.gif","previews/en-1-16.gif","previews/en-1-17.gif","previews/en-1-18.gif","previews/en-1-19.gif","previews/en-1-20.gif","previews/en-1-21.gif","previews/en-1-22.gif","previews/en-1-23.gif","previews/en-1-24.gif","previews/en-1-25.gif","previews/en-1-26.gif","previews/en-1-27.gif","previews/en-1-28.gif","previews/en-1-29.gif","previews/en-1-30.gif"],["Helasd you?","Where sasaddsdam?","Weasdd!","Tasasdther","AtsaddsaBeach","Cheasd Hotel","At the Hotel","aaaaaaaaat?","At the Market","Aasdt's","Mesadasd th","Shdsdsssg","sssss","On aaaa","Do you work or study?","aaaaaaa","At tadstation","aaaaaae Gym","How doasdtou2026?","Planning a Trip","At adsk","At the asdurant","At the Inads00e9","My Taaaog","A Meetiaaaaay adher","Tourist sdsadn Centre","Saaaaing","Aaaaaa Match","Lookaaasd","At tasda"]]
  

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

1. Почему вы разделяете результат на 3 разных массива?

2. Вы возвращаетесь из функции? Если нет, попробуйте вместо этого вывести его с помощью echo или print

3. @KodleeYin я где-то это читал

4. Что вы получаете? вы уверены, что результат запроса не пустой, и зачем разбивать массив? и измените возврат для echo

5. Вы также вызываете mysql_fetch_array() процедурно, используя объект в качестве ресурса запроса… Хотя это не обязательно неверно, это определенно странно и, скорее всего, это не то, что вы собираетесь делать…

Ответ №1:

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

Я восстановил пример того, как будет выглядеть ваш исходный вывод базы данных:

 $array = json_decode($json, true);

$row = array();
list($orders, $imageURLS, $names) = $array;
foreach($orders as $key => $val) {
  $row[] = array(
    'order' => $val,
    'imageURL' => $imageURLS[$key],
    'name' => $names[$key]
  );
}
  

Итак, в вашем коде вы должны попробовать это:

 $output = array();
while($row = mysql_fetch_array($mysql->result)) {
    $output[] = $row;
}
return json_encode($output);
  

И вы получите гораздо более простую структуру данных для работы.Пример:

 [
  {
    "order": "1",
    "imageURL": "previews/en-1-1.gif",
    "name": "Helasd you?"
  },
  {
    "order": "2",
    "imageURL": "previews/en-1-2.gif",
    "name": "Where sasaddsdam?"
  }
]
  

Ответ №2:

Судя по комментариям к вашему первоначальному вопросу, похоже, вы ищете :

  $main_array = array() ;    


    while($row = mysql_fetch_array($mysql->result)) {

        $res = array($row["order"], $row["imageURL"],$row["name"]);   
        $main_array[] = $res; 
    }

    return json_encode($main_array);
  

Ответ №3:

Вывод правильный. Массив json, содержащий три массива json. Но я предполагаю, что вы хотите, чтобы каждый элемент был отдельным массивом / объектом, содержащим order , imageURL , name . Если это правильно, попробуйте что-то вроде:

 $result = array();

while($row = mysql_fetch_array($mysql->result)) {
$result[] = array("order"=>$row["order"], "imageURL" => $row["imageURL"],"name"=> $row["name"])
}
$res = array($order, $imageURL, $name);
return json_encode($result);