public static function instantiate($record){
$object = new self;
// $object->id = $record['UserID'];
// $object->username = $record['Username'];
// $object->password = $record['Password'];
// $object->first_name = $record['Fname'];
// $object->last_name = $record['Lname'];
// $object->email = $record['Email'];
foreach (array_unique($record) as $attribute => $value) {
if($object->has_attribute($attribute)){
$object->$attribute = $value;
//var_dump($attribute);echo '<br>';
}
}
return $object;
}
在这个函数中,我以两种方式从这个$对象中获取值。距评论部分还有很长的路要走,从未注释的部分(obv)。
漫长的道路给出了良好的结果:
object(User)#5(6){[“id”] =&gt; string(1)“1”[“username”] =&gt; string(6)“Parley”[“password”] =&gt; string(5)“12345”[“first_name”] =&gt; string(8)“Cristian”[“last_name”] =&gt; string(8)“Pirloaga”[“email”] =&gt; string(27)“cristian.pirloaga@gmail.com”}
简短的方法给出了一个糟糕的结果:
INT(0) INT(1) INT(2) INT(3) INT(4) INT(5) INT(6) object(User)#5(13){[“id”] =&gt; NULL [“username”] =&gt; NULL [“password”] =&gt; NULL [“first_name”] =&gt; NULL [“last_name”] =&gt; NULL [“email”] =&gt; NULL [“0”] =&gt; string(1)“1”[“1”] =&gt; string(8)“Cristian”[“2”] =&gt; string(8)“Pirloaga”[“3”] =&gt; string(27)“cristian.pirloaga@gmail.com”[“4”] =&gt; string(6)“Parley”[“5”] =&gt; string(5)“12345”[“6”] =&gt; string(19)“2016-02-12 05:04:22”}
int(1).. int(6)是$属性值,后面是对象。
我试图将$属性值与长距离的那些字段进行匹配。我该怎么做? 这是一个实际的教程代码,它适用于他而不是我。
我有一个次要问题。 foreach循环总是将值加倍。在这种情况下,如果我删除了array_unique函数,它将在数据库中显示结果两次,它只有一行。为什么?
答案 0 :(得分:0)
您可以使用mysqli_fetch_object
代替mysqli_fetch_array
来获得所需的结果。
但要回答你的问题:如果使用mysqli_fetch_array
,默认情况下你会得到一个包含数字键和关联键的数组。例如:
array(
1 => 'john',
2 => 'doe',
'firstname' => 'john',
'lastname' => 'doe'
)
为避免这种情况,您可以将第三个参数int $result_type
设置为MYSQL_ASSOC
,如下所述:
http://php.net/manual/de/function.mysql-fetch-array.php
使用MYSQL_ASSOC
,您将获得不带数字键的数组,例如:
array(
'firstname' => 'john',
'lastname' => 'doe'
)
即使没有fore array_unique
,你的功能也能正常工作。