2013-02-20 3 views
2

В моем приложении для Android, связанного с сельским хозяйством, пользователь отправляет имя урожая в PHP webservice и что webservice должен возвращать данные об этом урожае.Многоуровневый массив JSON в PHP

Вот пример структуры базы данных.

Crop_Master:Crop_Id , Crop_Name , Seed_Rate , Fertilizer 
Pest: Crop_id , Pest_Name 

Теперь я знаю о функции fetchAll() ПДО и преобразовать его в JSON массив, если данные поступают из одной таблицы.

Нравится это: здесь данные взяты из таблицы Crop_Master и отлично работают.

$query1="select seed_rate,fertilizer_dosage from crop_master where crop_id='$crop_id'"; 

$res=$db->query($query1); 

$output=$res->fetchAll(PDO::FETCH_ASSOC); 

print(json_encode($output)); 

Но я не знаю, как создать единый массив вывода, когда данные поступают из нескольких таблиц.

Предположим, я хочу создать массив JSON как это:

[ 
    { 
     "seed_rate":"value_from_db" 
     "fertilizer":"value_from_db" 
     "pests": 
       [{"pest_name:"value_from_db"} 
       {"pest_name:"value_from_db"} 
       . 
       . 
       . 
       ] 
    } 
] 

Тогда как я могу запустить несколько запросов и сделать единый массив выходной?

+0

Вам нужно получить свой первый набор результатов, сказать $ output, затем перебрать через уникальный идентификатор каждого выхода и выполнить новый запрос для каждого, добавляя результаты к оригиналу, то есть $ output [вредители] –

ответ

2

Вам нужно добавить элемент массива «вредителей» в массив $ вывода и заполнить его ... Как будет зависеть от структуры базы данных, но, вероятно, что-то вроде

$query1="select seed_rate,fertilizer_dosage from crop_master where crop_id='$crop_id'";  
$res=$db->query($query1);  
$output=$db->fetchAll(PDO::FETCH_ASSOC); 

$query2="select pest_name from pests, crop_pests where pests.pest_id = crop_pests.pest_id and crop_pests.crop_id='$crop_id'";  
$res=$db->query($query2);  
$output["pests"]=$db->fetchAll(PDO::FETCH_ASSOC); 

print(json_encode($output)); 

Итак, точка, вы необходимо иметь массив вредителей как элемент вашего массива $ output. Мой $ query2, конечно, является просто примером и нуждается в корректировке для вашей базы данных.

+0

Да .. это то, что я хотел. Теперь я могу добавить больше результатов в массив output [], например $ output ['desaases'] или $ output ['soil_types']. Тханкс @ Андрея. – apatel

Смежные вопросы