2015-05-24 3 views
3

Я отправляю словарь как JSON на сервер. Словарь содержит только один ключ, который представляет собой массив элементов:

header('Content-type: application/json'); 

$request = json_decode(file_get_contents('php://input')); 

$array = json_decode($request['array']); 

значение для ключа «массива» является массивом, не может быть объектом.

Таким образом, в основном эти два метода будут возвращать то же самое:

$array = json_decode($request['array']); 

$array = json_decode($request['array'], TRUE); 

я прав?

Единственное применение этого метода является то, когда вы хотите, чтобы преобразовать объект в массив:

$array = json_decode($request['object'], TRUE); 

Почему вы никогда не хотите, чтобы сделать это?

Я имею в виду, что я понимаю, что могут быть приложения для этого, но, с другой стороны, мне потребовался целый день, чтобы переварить этот способ мышления, и все еще кажется, что существует огромный разрыв в мышлении.

Это небольшое удобство испортит конкретный способ анализа данных и просто запутывает новичка, подобного мне.

+1

Ну, во многих случаях, работающих с ассоциативным массивом проще, чем работать со стандартным объектом класса, вот почему. – adeneo

+0

Если проще работать с ассоциативным массивом, то ... почему вы отправляете объект в первую очередь ??? – Vulkan

+1

Вы не отправляете объект, вы отправляете строку в формате JSON. Как вы разбираете, что JSON на сервере зависит от вас, и, как правило, ассоциативные массивы часто легче работать, чем стандартные объекты класса. – adeneo

ответ

0

Почему истина существует, вы можете понять ,, См. Следующий код ниже.

<?php 
$json = '{"a":1,"b":2,"c":3,"d":4,"e":5}'; 

var_dump(json_decode($json)); 
var_dump(json_decode($json, true)); 

?> 

выход будет для указанного выше кода:

object(stdClass)#1 (5) { 
    ["a"] => int(1) 
    ["b"] => int(2) 
    ["c"] => int(3) 
    ["d"] => int(4) 
    ["e"] => int(5) 
} 

array(5) { 
    ["a"] => int(1) 
    ["b"] => int(2) 
    ["c"] => int(3) 
    ["d"] => int(4) 
    ["e"] => int(5) 
} 
+1

err, вы на самом деле не объяснили что-нибудь здесь - вы просто проиллюстрировали то, что уже заявили ОП. – Martin

5

Там четкое различие между массивов и объектов в JavaScript/JSON. Массивы не имеют явных индексов, но численно индексируются, а объекты не сортируются и имеют именованные свойства. По умолчанию json_decode отличием этой разницы и декодирует массивы JSON для массивов PHP и объектов JSON для объектов PHP (экземпляры stdClass).

Однако массивы PHP также имеют поддержку ассоциативных индексов; поэтому объект JSON может быть декодирован либо объекту PHP , либо массивом PHP. Вы можете выбрать, какой вы предпочитаете, с этим вторым параметром: json_decode. Здесь нет 100% прозрачного отображения 1: 1 между этими двумя разными языками, поэтому вместо этого есть предпочтение.

0

Просто Если вы используете так, я покажу в виде массива, и если вы не использую, чем он будет показывать в

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