我有一个类说,Foo有一个名为bar:
[PHP Fiddle Link]的json字符串属性
<?php
class Foo {
public $bar = '{"1455260079":"Tracking : #34567808765098767 USPS","1455260723":"Delivered","1455261541":"Received Back"}';
public function getBar(){
return (array) json_decode($this->bar);
}
public function remove($timestamp){
$newBar = $this->getBar();
print_r($newBar);
unset($newBar[$timestamp]);
print_r($newBar);
$this->bar = json_encode($newBar);
}
}
现在,要从bar中删除元素,我正在执行以下操作,我无法弄清楚它为什么不删除:
$foo = new Foo();
$foo->remove("1455261541");
echo $foo->bar;
打印出来:
Array
(
[1455260079] => Tracking : #34567808765098767 USPS
[1455260723] => Delivered
[1455261541] => Received Back
)
Array
(
[1455260079] => Tracking : #34567808765098767 USPS
[1455260723] => Delivered
[1455261541] => Received Back
)
{"1455260079":"Tracking : #34567808765098767 USPS","1455260723":"Delivered","1455261541":"Received Back"}
这背后的原因是什么?有帮助吗?
最佳答案 尝试下面的解决方案,我只是更改了getBar函数并在json_decode函数中添加了一个参数:
class Foo {
public $bar = '{"1455260079":"Tracking : #34567808765098767 USPS","1455260723":"Delivered","1455261541":"Received Back"}';
public function getBar(){
return json_decode($this->bar, true);
}
public function remove($timestamp){
$newBar = $this->getBar();
print_r($newBar);
unset($newBar[$timestamp]);
print_r($newBar);
$this->bar = json_encode($newBar);
}
}
$foo = new Foo();
$foo->remove("1455261541");
echo $foo->bar;
输出:
Array
(
[1455260079] => Tracking : #34567808765098767 USPS
[1455260723] => Delivered
[1455261541] => Received Back
)
Array
(
[1455260079] => Tracking : #34567808765098767 USPS
[1455260723] => Delivered
)
{"1455260079":"Tracking : #34567808765098767 USPS","1455260723":"Delivered"}