2015-03-09 2 views
-2

Ожидаемый JSON:Как получить данные JSON из таблицы MySQL с помощью PHP?

{ 
    id: 1, 
    name: "Sony Xperia Z3", 
    price: 899, 
    specs: { 
      manufacturer: "Sony", 
      storage: 16, 
      os: "Android", 
      camera: 15 
    }, 
    description: " WOW", 
    rating: 4, 
    image: { 
      small: "assets/images/sony-xperia-z3.jpg", 
      large: "assets/images/sony-xperia-z3-large.jpg" 
    } 
    } 

MySQL таблицы:

CREATE TABLE IF NOT EXISTS `phones` (
    `id` tinyint(4) NOT NULL AUTO_INCREMENT, 
    `name` varchar(100) NOT NULL, 
    `price` int(11) NOT NULL, 
    `manufacturer` varchar(100) NOT NULL, 
    `storage` tinyint(4) NOT NULL, 
    `os` varchar(100) NOT NULL, 
    `camera` tinyint(4) NOT NULL, 
    `description` varchar(400) NOT NULL, 
    `rating` tinyint(4) NOT NULL, 
    `image_small` varchar(200) NOT NULL, 
    `image_large` varchar(200) NOT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;` 

Мой код PHP:

<?php 
    header("Access-Control-Allow-Origin: *"); 
    header("Content-Type: application/json; charset=UTF-8");  
    $conn = new mysqli("localhost", "root", "", "php_test");  
    $result = $conn->query("SELECT id, name,price,manufacturer,storage,os,camera,description FROM phones"); 

    $outp = "["; 
while($rs = $result->fetch_array(MYSQLI_ASSOC)) { 
    if ($outp != "[") {$outp .= ",";} 

    $outp .= '{"id":"' . $rs["id"] . '",'; 
    $outp .= '"name":"' . $rs["name"] . '",'; 
    $outp .= '"price":"' . $rs["price"] . '",'; 
    $outp .='"specs:"'.'{"manufacturer":"'. $rs["manufacturer"].'"}'.'",'; 
    $outp .= '"storage":"' . $rs["storage"] . '",'; 
    $outp .= '"os":"' . $rs["os"] . '",'; 
    $outp .= '"camera":"' . $rs["camera"] . '",'; 
    $outp .= '"description":"'. $rs["description"]  . '"}'; 

} 
$outp .="]"; 

$conn->close(); 
echo($outp); 
//echo json_encode($outp); 
?> 

ответ

1

Это позволит решить вашу проблему

<?php 
    $conn = new mysqli("localhost", "root", "", "php_test");  
    $result = $conn->query("SELECT * FROM phones"); 
    $array_main = array(); 
    $arr_row = array(); 
    $arr_images = array(); 
    $counter = 0; 
    while($results = $result->fetch_array(MYSQLI_ASSOC)) { 
     $arr_row[$counter] = $results; 
     $arr_row[$counter]['specs'] = array(); 
     $arr_row[$counter]['specs']['manufacturer'] = $arr_row[$counter]['manufacturer']; 
     $arr_row[$counter]['specs']['storage'] = $arr_row[$counter]['storage']; 
     $arr_row[$counter]['specs']['os'] = $arr_row[$counter]['os']; 
     $arr_row[$counter]['specs']['camera'] = $arr_row[$counter]['camera']; 
     $arr_row[$counter]['images'] = array(); 
     $arr_row[$counter]['images']['small'] = $arr_row[$counter]['image_small']; 
     $arr_row[$counter]['images']['large'] = $arr_row[$counter]['image_large'];  
     unset($arr_row[$counter]['manufacturer']); 
     unset($arr_row[$counter]['storage']); 
     unset($arr_row[$counter]['os']); 
     unset($arr_row[$counter]['camera']); 
     unset($arr_row[$counter]['image_small']); 
     unset($arr_row[$counter]['image_large']); 
     $array_main[$counter] = $arr_row[$counter]; 
     $counter++; 
    } 

$conn->close(); 
echo(json_encode($array_main)); 
?> 

код объяснение: У вас есть два JSon массива внутри основного массива. Поэтому я создаю два массива под названием specs, images. Затем я добавляю ваши данные к этим массивам. Наконец, я удаляю предыдущие элементы из массива arr_row и вместо этого добавляю созданные два массива.

+0

спасибо Dan Его работа наконец – MAFAIZ

0

использование json_encode
, когда у вас есть массив, то просто использовать json_encode, чтобы преобразовать массив JSON.

$outp = array(); 
    while($rs = $result->fetch_array(MYSQLI_ASSOC)) { 
     $outp[]['id'] = $rs['id']; 
     // assign all data you need e.g name, description etc 
     $outp[]['specs'] = array('manufacturer' => $res['manufacturer'], 'storage' => $res['storage'], 'os' => $res['os'], 'camera' => $res['camera']); 
    } 
    $conn->close(); 
    echo json_encode($outp); 
+0

Я знаю это Я хотел в нескольких столбцах в массиве json. , как это спецификация: { производитель: "Sony", хранения: 16, ОС "Android", камеры: 15 }, – MAFAIZ

+0

, то вы должны сделать вложенный массив .. я редактирование моего ответа –

+0

вы должен получить смысл сейчас. проверить мой обновленный ответ –

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