PHP json_encode als Objekt nach PHP-Array unset ()

Ich habe komisches Verhalten mitjson_encode nach Entfernen eines numerischen Feldschlüssels mitunset. Der folgende Code sollte das Problem deutlich machen. Ich habe es sowohl von der CLI als auch als Apache-Mod ausgeführt:

PHP Versionsinfo:

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

PHP Code

<?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));

Programmausgabe

C:\Users\usr\Desktop>php test.php
[{"abc":"123"},{"jkl":"234"},{"nmo":"567"}]
{"0":{"abc":"123"},"2":{"nmo":"567"}}

Wie Sie sehen können, das erste Mal$a wird in JSON konvertiert und als Javascript-Array codiert. Das zweite Mal (nach demunset Anruf)$a ist als Javascript-Objekt kodiert. Warum ist das so und wie kann ich das verhindern?

Antworten auf die Frage(6)

Ihre Antwort auf die Frage