2014-11-11 9 views
2

я выборки данных из БД, как этотВозвращает массив вместо объекта

$endResult = array(); 

    while($row = $stmt->fetch(PDO::FETCH_ASSOC)){ 
    if (!isset($endResult[$row['car']])) { 
      $endResult[$row['car']]= (object) array(
       'car' => $row['car'], 
       'carModel' => $row['carModel'], 
       'colors' => array() 
     ); 
    } 

       $endResult[$row['car']] -> colors [] = (object) array(
        'paintedOn' => $row['paintenOnDate'], 
        'paintedBy' => $row['paintedBy'] 
       ); 
      } 

//return with slim.php 
$response->body(json_encode($endResult)); 

и результат я получаю

{"1": 
    { 
    "car": "1", 
    "carModel": "model-1", 
    "colors": [ 
     { 
      "paintedOn": "2014-11-07", 
      "paintedBy": "5" 
     },{ 
      "paintedOn": "2014-11-08", 
      "paintedBy": "6" 
     }] 
    }, 
"2":{ 
    "car": "2", 
    "carModel": "model-2", 
    "colors": [ 
     { 
      "paintedOn": "2014-11-09", 
      "paintedBy": "7" 
     },{ 
      "paintedOn": "2014-11-10", 
      "paintedBy": "8" 
     }] 
    } 
    }//<--replace this with [] 

Даже если $endResult объявлен как массив я получаю {} скобки, как я могу заменить скобки «Объект» на скобки «Массив»?

UPDATE: Я не могу удалить json_encode как передний конец (магистральный) ожидающего сбор

UPDATE 2: $endResult = array(); возвращение [...] но $endResult[$row['car']]= (object) array(...) преобразовать его в {...}

+0

Вы кодировать его в JSON. Json работает с '{}'. – Daan

+0

, но если мне это нравится '$ stmt-> fetchAll (PDO :: FETCH_OBJ);' он вернет его как '[...]' – InTry

+0

Вы пытаетесь 'json_decode()' ?? – kupendra

ответ

2

Вы не можете достичь того, чего хотите, потому что это приведет к недействительным JSON. Согласно json.org:

Массив - это упорядоченный набор значений. Массив начинается с [(левая скобка) и заканчивается на] (правая скобка). Значения разделяются запятой.

Таким образом, вы можете иметь только значения в массиве. Поскольку вы добавляете имя в значение, оно должно стать объектом.

Если вы действительно хотите, чтобы ваш JSON, чтобы быть обернуты в массиве вам нужно удалить имена первого уровня, в вашем примере «1» и «2»:

[ 
    { 
     "car": "1", 
     "carModel": "model-1", 
     "colors": [ 
      { 
       "paintedOn": "2014-11-07", 
       "paintedBy": "5" 
      }, 
      { 
       "paintedOn": "2014-11-08", 
       "paintedBy": "6" 
      } 
     ] 
    }, 
    { 
     "car": "2", 
     "carModel": "model-2", 
     "colors": [ 
      { 
       "paintedOn": "2014-11-09", 
       "paintedBy": "7" 
      }, 
      { 
       "paintedOn": "2014-11-10", 
       "paintedBy": "8" 
      } 
     ] 
    } 
] 
+0

Я понял, спасибо! – InTry

0

Удалить преобразование в формат JSON. Также «объявление» в PHP не имеет значения. Вы по-прежнему можете назначать разные типы в ходе своей программы.

0

Я думаю, что функция PHP json_decode Должно помочь вам здесь. Это превращает формат JSON в массив.

0
use json_decode($data,true) for convert returned data in to array. 
+0

, что не помогает. – InTry

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