2016-02-12 3 views
3

у меня есть класс сказать, Foo, который имеет json строковое свойство bar: [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); 

    } 

} 

Теперь, чтобы удалить элемент из бара, я делаю следующее, Я не могу понять, почему это не удаление:

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

В чем причина этого? Любая помощь?

ответ

2

попытка ниже решения, я просто изменил 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"} 
+0

Хм, это работает круто! Странно, что мы не можем отбросить проклятый массив ключами! Благодарю. – tika

+1

Тип массива с использованием '(array)' будет преобразовывать ключи в строку, см. Var_dump массива в вашем исходном коде –

 Смежные вопросы

  • Нет связанных вопросов^_^