2012-02-22 3 views
1

Я огляделся, но не нашел ответа, поэтому решил, что дам ему спросить себя.2D-массивы в JSON, преобразованные в одномерный массив объектов

Я заметил, что поездка туда и обратно в JSON преобразует 2-мерный массив в 1D массив объектов.

Есть ли способ обойти это, или я должен просто попробовать работать с объектами с самого начала (например, $ test-> 1-> 4? Смотри пример ниже

$test = array(); 
    $test[0][0] = "0-0"; 
    $test[0][2] = "0-2"; 
    $test[1][1] = "1-1"; 
    $test[1][2] = "1-2"; 
    var_dump($test); 
    $encoded = json_encode($test); 
    var_dump($encoded); 
    $recreated = json_decode($encoded); 
    var_dump($recreated); 

выходов

array(2) { 
    [0]=> 
    array(2) { 
    [0]=> 
    string(3) "0-0" 
    [2]=> 
    string(3) "0-2" 
    } 
    [1]=> 
    array(2) { 
    [1]=> 
    string(3) "1-1" 
    [2]=> 
    string(3) "1-2" 
    } 
} 
string(45) "[{"0":"0-0","2":"0-2"},{"1":"1-1","2":"1-2"}]" 
array(2) { 
    [0]=> 
    object(stdClass)#19 (2) { 
    ["0"]=> 
    string(3) "0-0" 
    ["2"]=> 
    string(3) "0-2" 
    } 
    [1]=> 
    object(stdClass)#20 (2) { 
    ["1"]=> 
    string(3) "1-1" 
    ["2"]=> 
    string(3) "1-2" 
    } 
} 

ответ

2

Это происходит потому, что у вас нет текущих индексов в массиве:

$test = array(); 
$test[0][0] = "0-0"; 
$test[0][2] = "0-2"; 

В этом случае json_encode() ИМЕЕТ создать объект, потому что есть числовой ключа (1) отсутствует.

Вы можете декодировать его обратно в массив с json_decode($txt, true), но это только работа, а не исправление.

+0

Спасибо за ответ, который сработал. В моем конкретном приложении это будет массив 256x256, но вероятность того, что каждый индекс не будет установлен. Было бы лучше работать с объектами в первую очередь? Есть ли разница в производительности? – paullb

+0

Нет реальной разницы в производительности на стороне JS. На стороне PHP может быть небольшая разница, но я бы использовал массивы с '' json_decode ($ txt, true) 'или установил несуществующие индексы в NULL - dunno, что соответствует вашим потребностям. – ckruse

0

по умолчанию json_decode преобразует JSON в объекты, которые код должен выглядеть следующим образом:.

$recreated = json_decode($encoded, true);

+0

Yup, это сработало, спасибо! – paullb

0

Вы можете расшифровать как массивы:

$recreated = json_decode($encoded, true); 
+0

Да, это сработало, спасибо! – paullb

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