Как правильно отформатировать этот объект JSON в PHP - PullRequest
0 голосов
/ 13 марта 2009

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

Так что у вас будет что-то вроде

$cars['toyota'] = array("camry", "etc");

Мне нужно иметь возможность создать эту структуру данных в PHP, чтобы на стороне JavaScript я мог делать что-то вроде

alert(cars.vendor[0].type[1])

Как мне закодировать эту структуру данных в конце PHP?

Ответы [ 7 ]

1 голос
/ 13 марта 2009

Вот как настроить его так, как вы хотите:

<script>
    var test = <?php
        print json_encode(array('vendor' => array(
            'toyota' => array('type' => array('camry','siena')),
            'mitsubishi' => array('type' => array('mirage','galant'))
        )));
    ?>;
    alert(test.vendor['toyota'].type[1]); // siena
    alert(test.vendor['mitsubishi'].type[0]); // mirage
</script>

Я бы порекомендовал пропустить продавца и ввести его часть, если только вы не держите в этом объекте другие вещи и делаете что-то вроде этого:

<script>
    var vendors = <?php
        print json_encode(array(
            'toyota' => array('camry','siena'),
            'mitsubishi' => array('mirage','galant')
        ));
    ?>;
    alert(vendors['toyota'][1]); // siena
    alert(vendors['mitsubishi'][0]); // mirage
</script>
1 голос
/ 27 июня 2011
$data = array();
$data['userDetails'] =array( array("username"=>$username,"password"=>$password));
$data["wsfunction"]="user_authentication";

затем вывод функции кодирования json следующим образом

{"userDetails":[{"username":"Username","password":"Password"}],"wsfunction":"user_authentication"}
1 голос
/ 13 марта 2009

Если у вас PHP> 5.2.0, попробуйте json_encode($cars).

Это создаст массив в массиве, но не даст вам того, что есть в вашем примере JavaScript:

$vendors = array(
  'toyota' => array('camry', 'etc.'),
  'honda' => array('civic', 'fit', 'etc.'),
);

Возможно, вам не нужны все встроенные уровни vendors[0].types[1], чтобы упорядочить информацию.

0 голосов
/ 13 марта 2009

Ну, если вы используете PHP 5, вы можете использовать функцию json_encode , как многие уже ответили.

Если нет, если вы используете PHP 4, вам понадобится что-то еще, подобное этому .

0 голосов
/ 13 марта 2009

Вот как бы я это сделал:

class EmptyObject {}
$cars = new EmptyObject();
$cars->vendor[] = array('type' => array('camry','sienna'));
$cars->vendor[] = array('type' => array('mirage','galant'));
$json = json_encode($cars);
print $json;
// this produces:
// {"vendor":[{"type":["camry","sienna"]},{"type":["mirage","galant"]}]}
0 голосов
/ 13 марта 2009
$cars = array();
$cars['toyota'] = array("camry", "etc");
$json = json_encode($cars);

даст вам структуру JavaScript

var cars = {
    toyota: [ 'camry', 'etc' ]
};

Если хочешь

var cars = {
    vendor: [ { type: [ 'camry', 'etc' ] } ]
}

, что позволит вам вызвать alert(cars.vendor[0].type[1]) массив PHP должен выглядеть как

$cars = array(
    'vendor' => array(
        array('type' => array("camry", "etc"))
    )
);
$json = json_encode($cars);

Но, как уже отмечалось выше , вам, возможно, следует пропустить vendor -часть и использовать в качестве ключа имя соответствующего поставщика.

0 голосов
/ 13 марта 2009

Эй, ассоциативные массивы и объекты обрабатываются одинаково в Javascript. Таким образом, структура PHP

$cars['toyota'] = array("camry", "etc");

будет эквивалентно этому в JSON:

var cars = { "toyota": [ "camry", "etc" ] };

Вы можете легко преобразовать структуру PHP в JSON с помощью функции json_encode . Подробнее о формате JSON см. json.org .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...