我正在尝试动态使用对象中数组中的值。
在我的特定情况下,我有一个像这样的数组。
$this->customer = array(
[dealerId] => 4
[billFirstName] => Joe
[billLastName] => Blo
[billAddress1] => 1010s
[billAddress2] => 1020s
[billCity] => Anytown
[billState] => ST
[billCountry] => USA
[billPostalCode] => 11111
[dEmail] => emailaddress
[billPhone] => 8008008888
[password] => password
[distPrice] => 5
[distCost] => 20);
$result = $this->keyCheck('dealerId', 'customer');
我正在使用的方法:
protected function keyCheck($key, $array, $type = false)
{
if(array_key_exists($key, $this->$array) && $this->$array[$key]):
return $this->$array[$key];
else:
return $type;
endif;
}
第一次检查有效(array_key_exists($ key,$ this-> $ array))。但是第二次检查失败($ this-> $ array [$ key]),即使数组的索引中有一个值。我已经通过使用print_r($ this-> $ array)证明了数组存在于keyCheck()方法中;在方法内部。而且我知道我正在寻找的价值可以在方法中使用,打印$ this-> $ array ['dealerId'];
不要挂断我正在使用的名称或方法,我真正感兴趣的是找到如何解决以这种方式动态解决的数组中保存的值。
一旦它显露出来,我可能会轻易拍打我的头......
答案 0 :(得分:4)
您正在将可怕的处理字符串作为数组陷阱运行,即:
$str = 'customer'; echo $str[0]; // prints c
$array[$key]
的{{1}}部分被解释为显示字符串$ array 的第n个索引(如果您传递$this->$array[$key]
,它将尝试访问customer
,不存在)。首先将数组分配给变量。这是一个例子:
$this->c
或者,您可以使用Artjom答案中建议的复杂语法:class A
{
public $customer = array('dealerId'=>4, 'billFirstName'=>'Joe');
public function keyCheck($key, $arrayName, $type = false)
{
$array = $this->$arrayName;
if(array_key_exists($key, $array) && $array[$key]) {
return $array[$key];
} else {
return $type;
}
}
}
$a = new A();
echo $a->keyCheck('billFirstName', 'customer'); // Joe
。
PHP 5.4 addresses this gotcha:
[在PHP 5.4中]非数字字符串偏移 - 例如$ a ['foo']其中$ a是a string - 现在在isset()上返回false,在empty()上返回true,并生成 E_WARNING如果你试图使用它们。
此$this->{$arrayName}[$key]
应该可以帮助开发人员更快地追踪原因。
答案 1 :(得分:1)
你必须使用
$this->{$array}[$key];