Мне нужно преобразовать массив PHP в json, но я не понимаю, чего я ожидаю. Я хочу, чтобы это был объект, с которым я могу легко перемещаться с помощью числового индекса. Вот пример кода:
$json = array(); $ip = "192.168.0.1"; $port = "2016"; array_push($json, ["ip" => $ip, "port" => $port]); $json = json_encode($json, JSON_PRETTY_PRINT); // ----- json_decode($json)["ip"] should be "192.168.0.1" ---- echo $json;
Это то, что я получаю
[ [ "ip" => "192.168.0.1", "port" => "2016" ] ]
Но я хочу получить объект вместо массива:
{ "0": { "ip": "192.168.0.1", "port": "2016" } }
Спасибо 🙂
Вы хотите json_encode($json, JSON_FORCE_OBJECT)
.
Флаг JSON_FORCE_OBJECT
, как следует из названия, заставляет вывод json быть объектом, даже если он в противном случае был бы представлен как массив.
Вы также можете исключить использование array_push
для немного более чистого кода:
$json[] = ['ip' => $ip, 'port' => $port];
просто используйте только
$response=array(); $response["0"]=array("ip" => "192.168.0.1", "port" => "2016"); $json=json_encode($response,JSON_FORCE_OBJECT);
Чтобы получить массив с объектами, вы можете создать stdClass () вместо массива для внутренних элементов, как показано ниже;
<?PHP $json = array(); $itemObject = new stdClass(); $itemObject->ip = "192.168.0.1"; $itemObject->port = 2016; array_push($json, $itemObject); $json = json_encode($json, JSON_PRETTY_PRINT); echo $json; ?>
Рабочий пример http://ideone.com/1QUOm6
$ip = "192.168.0.1"; $port = "2016"; $json = array("response" => array("ip" => $ip, "port" => $port)); //IF U NEED AS JSON OBJECT $json = [array("ip" => $ip, "port" => $port)]; //IF U NEED AS JSON ARRAY $json = json_encode($json); echo $json;