Estoy experimentando un comportamiento extraño con json_encode
después de eliminar una clave de matriz numérica con unset
. El siguiente código debería aclarar el problema. Me he encontrado que tanto desde la línea de comandos y como un mod Apache:PHP json_encode como objeto después de PHP array unset()
PHP versión Info:
C:\Users\usr\Desktop>php -v
PHP 5.3.1 (cli) (built: Nov 20 2009 17:26:32)
Copyright (c) 1997-2009 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2009 Zend Technologies
Código PHP
<?php
$a = array(
new stdclass,
new stdclass,
new stdclass
);
$a[0]->abc = '123';
$a[1]->jkl = '234';
$a[2]->nmo = '567';
printf("%s\n", json_encode($a));
unset($a[1]);
printf("%s\n", json_encode($a));
salida Programa
C:\Users\usr\Desktop>php test.php
[{"abc":"123"},{"jkl":"234"},{"nmo":"567"}]
{"0":{"abc":"123"},"2":{"nmo":"567"}}
Como puede ver, la primera vez que $a
se convierte en JSON, se codifica como una matriz de JavaScript. La segunda vez (después de la llamada unset
) $a
se codifica como un objeto javascript. ¿Por qué es esto y cómo puedo prevenirlo?
+1 porque es bueno ver una pregunta bien hecha. :) – Spudley