【问题标题】:unset() not working inside class methodsunset() 在类方法中不起作用
【发布时间】:2016-05-23 07:31:33
【问题描述】:

我有一个类说,Foo,它有一个名为 barjson 字符串属性:[PHP Fiddle Link]

<?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"}

这背后的原因是什么?有什么帮助吗?

【问题讨论】:

    标签: php unset


    【解决方案1】:

    尝试以下解决方案,我只是更改了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"}
    

    【讨论】:

    • 嗯,这很酷!太奇怪了,我们不能用键取消一个该死的数组!谢谢。
    • 使用(array)的数组类型转换将键转换为字符串请参阅原始代码中数组的var_dump
    猜你喜欢
    • 2019-11-27
    • 1970-01-01
    • 2012-03-15
    • 2018-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多