早些时候,我有一些代码块,它工作正常,但在某些情况下,它扔PHP的通知:(阵列)型投来异样的行为对象数组转换
下面是代码:
$json = '{"1455260079":"Tracking : #34567808765098767 USPS","1455260723":"Delivered","1455261541":"Received Back"}';
$json_obj = json_decode($json);
$json_array = (array) $json_obj;
var_dump($json_array);
print_r($json_array);
echo $json_array["1455260079"]."\n";
输出:
array(3) {
["1455260079"]=>
string(34) "Tracking : #34567808765098767 USPS"
["1455260723"]=>
string(9) "Delivered"
["1455261541"]=>
string(13) "Received Back"
}
Array
(
[1455260079] => Tracking : #34567808765098767 USPS
[1455260723] => Delivered
[1455261541] => Received Back
)
Notice: Undefined index: 1455260079 in /in/PULrp on line 14
所以我上面的代码更改下面的代码和它的正常工作。
$json_array = json_decode($json, true);
var_dump($json_array);
print_r($json_array);
echo $json_array["1455260079"]."\n";
输出:
array(3) {
[1455260079]=>
string(34) "Tracking : #34567808765098767 USPS"
[1455260723]=>
string(9) "Delivered"
[1455261541]=>
string(13) "Received Back"
}
Array
(
[1455260079] => Tracking : #34567808765098767 USPS
[1455260723] => Delivered
[1455261541] => Received Back
)
Tracking : #34567808765098767 USPS
但在这里,我有点困惑,为什么(array)
型铸造转换未在此代码工作。我知道json_decode($json, true)
是将json字符串转换为数组的最佳选择,但$json_array = (array) $json_obj;
也是一个有效的选项。
虽然调查这两个代码的var_dump
它显示了一些差异,但两个数组的print_r
完全相同。
我很想知道为什么var_dump
这两种不同以及(array)
类型铸造在第一种情况下如何将对象转换为数组?
我也注意到,如果我的情况下,键是数字,即1455260079,如果我将键1455260079更改为某个字符串,则按预期工作。
你可以看到完整的代码的输出:https://3v4l.org/PULrp
所以基本上它不值得使用'(array)'类型转换,因为它会改变整个流的行为吗? –
除非你的对象没有整数键,否则似乎应该避免使用''(array)'类型转换,正如@limekin的答案所指出的那样。 – kazenorin