如何在php中动态取消设置类成员变量的数组值

时间:2013-03-12 10:22:03

标签: php

我想取消设置类的成员数组变量的第一个值,但我无法:

<?php

class A
{
    public  function fun()
    {       
        $this->arr[0] = "hello";
    }

    public $arr;
}


$a = new A();
$a->fun();
$var ="arr";

unset($a->$var[0]);  //does not unset "hello" value

print_r($a);

在Google搜索后找不到任何解决方案。如何动态删除第一个值?

4 个答案:

答案 0 :(得分:2)

尝试以下方法:

unset($a->{$var}[0]);

您的代码存在问题,PHP尝试访问成员变量$var[0]null)而不是$var

答案 1 :(得分:0)

您可以尝试使用array_shift

array_shift($a->{$var});

此函数使用对值的引用,并从数组的开头删除(并返回)值。

答案 2 :(得分:0)

<?php

  class A
 {
   public  function fun()
   {       
      $this->arr[0] = "hello";
   }

   public $arr;
}


 $a = new A();
 $a->fun();

 // no need to take $var here 
 // you can directly access $arr property wihth object of class

 /*$var ="arr";*/

 // check the difference here  
 unset($a->arr[0]);  //unset "hello" value

 print_r($a);

?>

尝试这个

答案 3 :(得分:0)

由于$ arr是A类的成员并且声明为public,因此您可以直接使用

$a = new A();
$a->fun();
unset $a->arr[0];

但是你会惊讶的是,对于数字索引数组,未设置可能会带来问题。

假设您的数组是这样的;

$arr = ["zero","one","two","three","four"];
unset($arr[2]);       // now you removed "two"
echo $arr[3];         // echoes three

现在数组是[“零”,“一”,未定义,“三”,“四”];

$ arr [2]不存在,未定义,其余部分未重新索引......

对于使用以下方法的数字索​​引数组更好:

$arr = ["zero","one","two","three","four"];
array_splice($arr,2,1);  // now you removed "two" and reindexed the array 
echo $arr[3];            // echoes four...

现在数组是[“零”,“一”,“三”,“四”];