Tôi đang gặp phải hành vi kỳ lạ với json_encode
sau khi xóa khóa mảng số bằng unset
. Các mã sau đây sẽ làm cho vấn đề rõ ràng. Tôi đã chạy nó từ cả hai CLI và như một Apache mod:PHP json_encode làm đối tượng sau khi bỏ qua mảng PHP()
PHP phiên bản thông tin:
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 Mã
<?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));
Chương trình Output
C:\Users\usr\Desktop>php test.php
[{"abc":"123"},{"jkl":"234"},{"nmo":"567"}]
{"0":{"abc":"123"},"2":{"nmo":"567"}}
Như bạn có thể thấy, lần đầu tiên $a
được chuyển thành JSON nó được mã hóa dưới dạng một mảng javascript. Lần thứ hai (sau cuộc gọi unset
) $a
được mã hóa dưới dạng đối tượng javascript. Tại sao điều này và làm thế nào tôi có thể ngăn chặn nó?
+1 vì bạn nên xem câu hỏi hay. :) – Spudley