Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 有没有办法比较两个数组';s键,如果这些键相等,则将第一个数组的值分配给类对象?_Php_Arrays - Fatal编程技术网

Php 有没有办法比较两个数组';s键,如果这些键相等,则将第一个数组的值分配给类对象?

Php 有没有办法比较两个数组';s键,如果这些键相等,则将第一个数组的值分配给类对象?,php,arrays,Php,Arrays,我有两个数组。第一个包含来自数据库的id、用户名和密码,如下所示: Array ( [id] => 3 [username] => Scott [password] => new ) 第二个数组是 get_class_vars(); 显然,它包含了所有的类变量,如id、username等 如何比较两个数组中的键,如果键相同,例如username=username,如何将username的值分配给类属性username?值得注意的是,我已经实例化了该类,并且正在从test.p

我有两个数组。第一个包含来自数据库的id、用户名和密码,如下所示:

Array ( [id] => 3 [username] => Scott [password] => new )
第二个数组是

get_class_vars();
显然,它包含了所有的类变量,如id、username等

如何比较两个数组中的键,如果键相同,例如username=username,如何将username的值分配给类属性username?值得注意的是,我已经实例化了该类,并且正在从test.php调用这些方法:

// authenticate returns user info from the db 
$user = new User();
$find = $user->authenticate($username, $password);
$user->instantiate($find) // this is the method that I need to create
                          // in user.php to assign the user properties
希望这是有道理的。几个小时来我一直在想办法。如果您需要任何澄清,请让我知道

试试这个:

foreach(get_class_vars() as $key->$value)
  $array[$key] = $value;
这将从
get\u class\u vars()
获取密钥,并将
$array
(您的另一个数组)中的值设置为
$value

尝试以下操作:

foreach(get_class_vars() as $key->$value)
  $array[$key] = $value;
$common_keys = array_intersect(array_keys($array), array_keys(get_class_vars($object));
foreach($common_keys as $key) $object->$key = $array[$key];

这将从
get_class_vars()
获取密钥,并将
$array
(您的其他数组)中的值设置为
$value

PHP支持在其他变量中存储变量和函数名。使用该方法,您可以迭代数组中的所有键,检查键是否作为
User
对象的属性存在,如果存在,则用数组中的值替换对象中的值:

$common_keys = array_intersect(array_keys($array), array_keys(get_class_vars($object));
foreach($common_keys as $key) $object->$key = $array[$key];
foreach ($array as $key => $value) {
    if (isset($user->$key)) {
        $user->$key = $value;
    }
}

因此,对于
数组([username]=>JohnSmith)
它将检查
isset($user->username)
,然后分配
$user->username='JohnSmith'
PHP支持在其他变量中存储变量和函数名。使用该方法,您可以迭代数组中的所有键,检查键是否作为
User
对象的属性存在,如果存在,则用数组中的值替换对象中的值:

foreach ($array as $key => $value) {
    if (isset($user->$key)) {
        $user->$key = $value;
    }
}

因此,对于
数组([username]=>JohnSmith)
它将检查
isset($user->username)
,然后分配
$user->username='JohnSmith'

,这看起来像是一个赢家。如果这个方法在类中,对于get class vars参数,我会用$this替换$object吗?不太可能
get\u object\u vars($this)
也允许访问受保护和私有变量(由于使用$this的范围)。我建议保留一个数据数组并改用getter/setter。有关更多信息,请参阅PHP的magic method文档。这看起来是个赢家。如果这个方法在类中,对于get class vars参数,我会用$this替换$object吗?不太可能
get\u object\u vars($this)
也允许访问受保护和私有变量(由于使用$this的范围)。我建议保留一个数据数组并改用getter/setter。有关更多信息,请参阅PHP的magic method文档。