gpt4 book ai didi

PHP 教义 : Test if an object is in an ArrayCollection

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:07:58 27 4
gpt4 key购买 nike

我正在尝试使用方法 ArrayCollection::contains 来查找对象是否已经在我的集合中,但是当我这样做时:

//My ArrayCollection
$lesRoles = $drt->getDrtApplication()->getRoles();
$leRole = $lesRoles->first();
echo "Property appNom : ".$leRole->getRleApplication()->getAppNom()."// Property appRole : ".$leRole->getRleId()." <br>";


$role = new \Casgaya\Role(2,$drt->getDrtApplication());
echo "Property appNom : ".$role->getRleApplication()->getAppNom()."// Property appRole : ".$role->getRleId()." <br>";

var_dump($lesRoles->contains($role));

结果是:
属性 appNom:CORA//属性 appRole:2
属性 appNom:CORA//属性 appRole:2
bool (假)

由于 appNom 和 rleId 是实体 Role 拥有的仅有的两个属性,我希望它会返回 true。

编辑新测试用例:

echo "Test object role :  <br>";
var_dump($lesRoles==$role);
echo"<br>";
echo "Test integer property rleID from object role : <br>";
var_dump($role->getRleId() == $leRole->getRleId());
echo"<br>";
echo "Test Application object property RleApplication from object role : <br> ";
var_dump($role->getRleApplication() == $leRole->getRleApplication());

结果是:

属性 appNom:CORA//属性 appRole:2
属性 appNom:CORA//属性 appRole:2
测试对象角色:
bool 值(假)
从对象角色测试整数属性 rleID :
bool 值(真)
从对象角色测试应用程序对象属性 RleApplication :
bool (真)

请注意,当我测试两个属性是否相等时,它们都为真。但是当我测试整个对象的相等性时,它是错误的。

所以问题不再是关于 ArrayCollection::contains,而是:
在相等的情况下比较两个学说实体的标准是什么?

最佳答案

我自己找到了解决方案,这里是给有同样问题的人:

我正在使用方法 ArrayCollection::exists 而不是 contains,所以我可以指定应该建立对象之间的相等性的标准:

以我为例:

$result = $lesRoles->exists(function($key,$element) use ($role) 
{
return ($element->getRleApplication() == $role->getRleApplication() && $role->getRleId() == $element->getRleId());
});

注意这里的 $key 和 $element 是从集合中测试的当前对象。

关于PHP 教义 : Test if an object is in an ArrayCollection,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35625149/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com