仅将数组中的匹配键转换为匹配的对象属性

时间:2014-05-19 01:11:16

标签: php oop

我试图只将关联数组中的匹配键转换为与它们匹配的对象属性。我在下面的代码在此行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];
    }
}

它可以工作,但是当一个键与属性不匹配时,反之亦然,则会显示未定义的索引。

2 个答案:

答案 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] : "";

  }
}