递归函数,用于使用 PHP 获取所有等效产品



我正在使用symfony 3,我有具有多对多关系自引用的表格。 海贼王有许多等价件。 等效的一块与许多件相关联。

例如:

件 :件 1 | 第 2 件 |第 3 件

等价物 :件 4 | 第 1 件 |第 4 件 第 5 件

我想获得第 1 件的所有等价物,结果必须是:第 4 件、第 2 件、第3 件、第 5 件

这是我尝试过的代码,它只给出:第 4 段,第 3 段

public function findAllEquivalentsByReference($reference)
{
$pieceFinales = array();
$listFinal = array();
$pieceO =  $this->getEntityManager()
->createQuery(
'SELECT p FROM EKPlateformeBundle:Piece p '.
'where  p.reference = :ref   and  p.etat = true ')
->setParameter('ref',$reference)
->getResult();
if (empty($pieceO))
{
$pieceO =  $this->getEntityManager()
->createQuery(
'SELECT p FROM EKPlateformeBundle:Piece p '.
'INNER JOIN p.references_oem  r '.
'where (( r.reference = :ref ) OR ( p.reference = :ref  ) ) and 
( p.etat = true )')
->setParameter('ref',$reference)
->getResult();
}

foreach ($pieceO as $piece) 
{      
$equivalents = $piece->getEquivalents();
$initiaux = $piece->getPieceInitiale(); 
// Les equivalents : 
foreach ($equivalents as $pe)
{   
$autreEquivalents = $pe->getEquivalents();
array_push($listFinal, $pe); 
foreach ($autreEquivalents as $p)
{  
if (!in_array($p, $listFinal))
{
array_push($listFinal, $p);
$piece->addEquivalent($p);
}
}
}
//
foreach ($initiaux as $i)
{   
$autreInitiaux = $i->getPieceInitiale();
array_push($listFinal, $i);
$piece->addEquivalent($i);
foreach ($autreInitiaux as $pii)
{  
if (!in_array($pii, $listFinal))
{
array_push($listFinal, $pii);
$piece->addEquivalent($pii);
}
}
}
array_push($pieceFinales ,$piece);
}
return $pieceFinales ;  
}

我找不到递归函数来给出正确的结果。

对于递归,你不能只有 1 个函数,你至少需要 2 个函数

例:

public function getEquivalentsByReference($reference)
{
$products = $someModel->getProductsByReference($reference);
$this->_getRecursiveEquivalents($products);
return $products;
}
protected function _getRecursiveEquivalents(&$products)
{
$equivalents = [];
foreach($products as $product) {
$equivalents[] = $someModel->getReferencesByID($product->reference);
}
$this->_getRecursiveEquivalents($equivalents);
$products = array_merge($products, $equivalents)

}

相关内容

  • 没有找到相关文章

最新更新