2013-03-12 14 views
2

我想取消设置类的成员变量数组的第一个值,但我不能给:如何在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中搜索。我如何动态删除第一个值?

+0

'$ a'是一个对象,使用'var_dump($ a)'和'$ var [0]'会给你'a'。你想要删除什么? – vedarthk 2013-03-12 10:25:05

+0

对于数值索引数组的进一步问题和未设置,请看下面的答案,祝你有愉快的一天。 – Ihsan 2013-03-12 10:57:52

回答

2

尝试以下操作:

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

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

0

您可以array_shift尝试:

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

此功能与阵列的一开始就使用参考值,并移除(返回)值。

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

?> 

试试这个

0

因为$改编为A类的成员,并宣布公开,您可以直接使用

$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 

现在array为[“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... 

现在阵列是[“零”,“一”,“三”,“四”];