我试图只将关联数组中的匹配键转换为与它们匹配的对象属性。我在下面的代码在此行Unidentified variable : key
上出现if(array_key_exists($array[$key], $classprop)){
错误。
<?php
class assoctoprop {
public $fname;
public $lname;
public $email;
public function assign(){
$array = array("fname"=>"firstname", "lname"=>"lastname", "email"=>"my@email.com" );
$classprop = get_object_vars($this);
if(array_key_exists($array[$key], $classprop)){
foreach($classprop as $key=>$value){
$this->{$key} = $array[$key];
}
}
}
}
$user = new assoctoprop;
$user->assign();
echo $user->fname."<br/>";
echo $user->lname."<br/>";
echo $user->email."<br/>";
?>
如果我这样修改方法
public function assign(){
$array = array("fname"=>"firstname", "lname"=>"lastname", "email"=>"my@email.com" );
foreach(get_object_vars($this) as $key=>$value){
$this->{$key} = $array[$key];
}
}
它可以工作,但是当一个键与属性不匹配时,反之亦然,则会显示未定义的索引。
答案 0 :(得分:1)
您需要在if
循环内移动foreach
语句,因为在$key
循环之外,$key
未定义。您还需要检查阵列中的foreach($classprop as $key=>$value){
if(array_key_exists($key, $array)){
:
$array
你当然也可以反过来做,循环{{1}}并检查对象中是否存在属性。
答案 1 :(得分:1)
public function assign(){
$array = array("fname"=>"firstname", "lname"=>"lastname", "email"=>"my@email.com" );
foreach(get_object_vars($this) as $key=>$value){
if(isset($array[$key])){
$this->{$key} = $array[$key];
}
}
}
请添加if(isset($ array [$ key])check
或更好的你仍然需要在对象中初始化unresut变量
public function assign(){
$array = array("fname"=>"firstname", "lname"=>"lastname", "email"=>"my@email.com" );
foreach(get_object_vars($this) as $key=>$value){
$this->{$key} = isset($array[$key])? $array[$key] : "";
}
}