2

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

<?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);

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

4

4 回答 4

2

尝试以下操作:

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

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

于 2013-03-12T10:24:25.037 回答
0

您可以尝试array_shift

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

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

于 2013-03-12T10:25:38.033 回答
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);

?>

试试这个

于 2013-03-12T10:27:45.820 回答
0

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

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

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

假设你的数组是这样的;

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

现在数组是 ["zero","one", undefined ,"three","four"];

$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...

现在数组是 ["zero","one","three","four"];

于 2013-03-12T10:54:31.550 回答