これらのクラスインスタンスから派生したオブジェクトがあるとします
class A
{
...
private b //list of object of class B
}
class B
{
...
private c //list of object of class C
}
class C
{
...
private id
}
さて、私のコードのどこかで、私はこの状況に陥っています
function findId(array $idList)
{
[...]
}
$idList
要素がこのオブジェクト「カスケード」に含まれている場合、(の各要素に対して)見つける必要がある場所
最初の解決策
//object initialization
foreach($a->getB() as $b)
{
foreach($b->getC() as $c)
{
foreach($idList as $id)
{
if($id == $c->getId())
{
//do something an break the cycle
}
}
}
}
2 番目のソリューション
//object initialization
$idSet = array();
foreach($a->getB() as $b)
{
foreach($b->getC() as $c)
{
$idSet[] = $c->getId();
}
}
$idSet = array_unique($idSet);
foreach($idList as $id)
{
if(array_search($id,$idSet) !== false)
{
[...]
}
}
どちらが良いですか?私の目標を達成するためのいくつかの代替方法はありますか?
重要
より良いデータ表現はありません。これは、これらのオブジェクトが何らかのデータベース オブジェクトであるためです (doctrine2)。