2014-12-22 3 views
-4

Так что я хочу строку JSON, что выглядеть примерно так:Создание JSON с ключевым значением

{"Madagascar": [ 
    { 
     "year": 2000, 
     "country": "Madagascar", 
     "country_id": 847, 
     "indicator": "Net Income - National Currency (millions)" 
    }, 
]} 

но мой PHP скрипт просто выводит ключ/значение, например:

{ 
     "year": 2000, 
     "country": "Madagascar", 
     "country_id": 847, 
     "indicator": "Net Income - National Currency (millions)" 
    } 

как я могу установить «Мадагаскар» - ключ в PHP?

EDIT: Я попробовал его, как показано ниже:

$post_filter = $_POST['time']; //seconds 
$filter = new DateTime(date("Y-m-d H:i:s")); 
$filter_ = $filter->modify("-$post_filter second"); 
$insert = "SELECT * FROM chat " 
     . "WHERE date >='" . $filter_->format('Y-m-d H:i:s') . "'" 
     . "ORDER BY date DESC"; 
$return = $sql->return_array($insert); 
foreach ($return as $var) { 
    array_merge($arr, array($var["id"] => $var)); 
} 
echo json_encode($arr); 
+0

Вы не думали показывать нам PHP? – Utkanos

+1

Где ваш скрипт PHP? –

+0

Перед кодированием вашего JSON просто создайте структуру, как хотите. Поэтому, если этот объект хранится в '$ data', тогда просто' $ newData = array ('Madagascar' => array ($ data)); '. –

ответ

2

легко сделать, вот пример.

$myInnerArray = [ 
    "year"=>2000, 
    "country"=>"Madagascar, 
    "country_id":847, 
    "indicator":"Net Income - National Currency (millions)" 
]; 
$outerArray = ["Madagascar=>$myInnerArray]; 
echo json_encode($outerArray); 

В вашем новом коде изменения:

foreach ($return as $var) { 
    array_merge($arr, array($var["id"] => $var)); 
} 

To:

foreach ($return as $var) { 
    $arr[$var["id"]] = $var; 
} 

присвоить элемент для каждой строки.

+0

Да, это было бы так. Но я хочу сохранить более одного массива под «Мадагаскар» – Snickbrack

+1

@Snickbrack см. Выше. array_merge создает большой плоский массив из всех строк, для каждой строки требуется подмассива. Возьми? – RobP