Преобразовать выбранную строку в JSON - PHP

0

Я хочу преобразовать выбранный результат в JSON. Вот мой код:

<?php
include("DbConnect.php");
    $connection=new DbConnect();
$sth = mysqli_query($connection->_con,"SELECT * FROM account WHERE ac_id='1'");
                if($sth){
                $rows = array();
                while($row = mysqli_fetch_assoc($sth)){
                  $users = mysqli_query($connection->_con,"SELECT user.user_id,user.name,user.email,ac_detail.ac_id,ac_detail.amount FROM user,ac_detail WHERE ac_detail.ac_id='1' AND user.user_id=ac_detail.user_id");
                  $usersArray = array();
                  while($userRow = mysqli_fetch_assoc($users)){
                   $usersArray[]=$userRow;
                  }
                  $a=array("users"=>$usersArray);
                  //$row["user"]=$usersArray
                    array_push($row,$a);
                  $rows[] = $row; 
                }
                echo json_encode(array('data'=>$rows));
                }else{
                  echo json_encode(array('message'=>'error - 2'));
                }

?>

Выполняя этот код, он генерирует JSON как:

{"data":[{"ac_id":"1","user_id":"2","title":"Travel","ac_for":"Traveling","required_amount":"50","current_amount":"0","initial_date":"2014-11-11","final_date":"2014-11-14","is_shared":"1","status":"1","0":{"users":[{"user_id":"2","name":"Muhammad Imran","email":"[email protected]","ac_id":"1","amount":"0"},{"user_id":"3","name":"Muhammad Imran","email":"[email protected]","ac_id":"1","amount":"0"}]}}]}

Но я не хочу "0" {"user ::...}

Как это должно быть (ожидаемые результаты):

{"data":[{"ac_id":"1","user_id":"2","title":"Travel","ac_for":"Traveling","required_amount":"50","current_amount":"0","initial_date":"2014-11-11","final_date":"2014-11-14","is_shared":"1","status":"1","users":[{"user_id":"2","name":"Muhammad Imran","email":"[email protected]","ac_id":"1","amount":"0"},{"user_id":"3","name":"Muhammad Imran","email":"[email protected]","ac_id":"1","amount":"0"}]}]}

заранее спасибо

Теги:
web-services

2 ответа

0

Почему бы вам вместо array_push($row,$a) попробовать:

<?php
include("DbConnect.php");
$connection=new DbConnect();

$sth = mysqli_query($connection->_con,"SELECT * FROM account WHERE ac_id='1'");

if($sth){
$rows = array();
while($row = mysqli_fetch_assoc($sth)){

    $users = mysqli_query($connection->_con,"SELECT user.user_id,  user.name, user.email, ac_detail.ac_id, ac_detail.amount FROM user,ac_detail WHERE ac_detail.ac_id='1' AND user.user_id=ac_detail.user_id");
    $usersArray = array();

    while($userRow = mysqli_fetch_assoc($users)){
         $usersArray[]=$userRow;
    }

// here comes the change
  //  $a = array("users"=>$usersArray);
  //            //$row["user"]=$usersArray

  //  array_push($row,$a);

    $row['users'] = $usersArray;

    $rows[] = $row; 
}

echo json_encode(array('data'=>$rows));

}else{

  echo json_encode(array('message'=>'error - 2'));

}

Это должно сработать. Не проверяйте данные образца.

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

Ты делаешь:

 while($row = mysqli_fetch_assoc($sth)){
    [...snip...]
    array_push($row,$a);

Строка while создает массив $row, который затем используется для создания $a. Затем вы нажимаете этот $a BACK на исходный массив $row. Но $row - это ассоциативный массив, поэтому нажатие клавиши $a получает ключ 0.

Поскольку теперь вы смешиваете ассоциативный массив (нечисловые ключи) с массивом с числовым ключом (операция push), PHP ДОЛЖЕН добавить числовой ключ к вашему нажатому элементу: вы не можете иметь элемент в массиве БЕЗ ключ.

Тогда, поскольку JS не позволяет фактическим массивам JS ([]) иметь нечисловые ключи, вся вещь должна быть преобразована в объект ({}).

То, что вы, вероятно, хотите, это нечто большее:

while($row = ...) {
    ... build $a ...
    array_push($row['users'], $a);

вместо.

  • 0
    Привет, спасибо за ответ. Я решил.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню