我想将对象添加到对象数组中,只要它不在数组中(我不想要克隆)。 我的代码不起作用。
$roleCount = 0;
$roles = Array();
foreach ($result as $row) {
// create a new Role
$role = new Role();
$role->setId($row['role_id']);
$role->setName($row['roleName']);
// add $role to $roles only if it's different from those that already are inside $roles array
if (!in_array($role, $roles)) {
print_r($role); // This is for test purposes
$roles[$roleCount] = $role;
$roleCount++;
echo "new role added ";
}
我认为in_array
松散的比较应该有效,但似乎没有。
如果两个对象实例具有相同的属性和值,则它们是相同的,并且是同一类的实例。
那么,为什么我的代码不起作用?它不止一次地添加相同的角色,即使它的属性与数组中已有的角色相同。
注意: print_r($role)
输出:
Role Object ( [id:Role:private] => 55 [name:Role:private] => user [description:Role:private] => [services:Role:private] => Array ( ) )
Role Object ( [id:Role:private] => 55 [name:Role:private] => user [description:Role:private] => [services:Role:private] => Array ( ) )
因此看起来对象属性是相同的。我错了吗?
答案 0 :(得分:1)
最简单的解决方案:使用角色的ID作为数组的键(ID 唯一,对吗?)
$roles = Array();
foreach ($result as $row) {
// create a new Role
$role = new Role();
$role->setId($row['role_id']);
$role->setName($row['roleName']);
// add $role to $roles only if it's different from those that already are inside $roles array
if (!array_key_exists($role->getId(), $roles)) { //Check if ID already exists as an array key.
$roles[$role->getId()] = $role;
echo "new role added ";
}
我假设Role
有一个getId()
方法,如果没有,$row["role_id"]
也会正常工作。
答案 1 :(得分:0)
角色的ID不同,因此不相等。
您可能希望保留一组角色名称,而不是尝试比较对象。