Я огляделся, но не нашел ответа, поэтому решил, что дам ему спросить себя.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"
}
}
Спасибо за ответ, который сработал. В моем конкретном приложении это будет массив 256x256, но вероятность того, что каждый индекс не будет установлен. Было бы лучше работать с объектами в первую очередь? Есть ли разница в производительности? – paullb
Нет реальной разницы в производительности на стороне JS. На стороне PHP может быть небольшая разница, но я бы использовал массивы с '' json_decode ($ txt, true) 'или установил несуществующие индексы в NULL - dunno, что соответствует вашим потребностям. – ckruse