使用php获取所有等价产品的递归函数
我正在使用symfony 3,我有一个具有多对多关系自引用的表块。 一件有许多等价物。 一个等价的片段与多个片段相关联 例如: 件:件1 |件2 |件3 等价物:件号4 |件号1 |件号4 第5件 我想得到第1部分的所有等价物,结果必须是:第4部分、第2部分、第3部分、第5部分 这是我试过的代码,它给出的只是:第4部分,第3部分使用php获取所有等价产品的递归函数,php,doctrine-orm,symfony-3.3,Php,Doctrine Orm,Symfony 3.3,我正在使用symfony 3,我有一个具有多对多关系自引用的表块。 一件有许多等价物。 一个等价的片段与多个片段相关联 例如: 件:件1 |件2 |件3 等价物:件号4 |件号1 |件号4 第5件 我想得到第1部分的所有等价物,结果必须是:第4部分、第2部分、第3部分、第5部分 这是我试过的代码,它给出的只是:第4部分,第3部分 public function findAllEquivalentsByReference($reference) { $pieceFinales = arr
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 ;
}
我找不到一个递归函数来给出正确的结果。对于递归,你不能只有一个函数,你至少需要两个 例如:
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)
}
你试过什么?你发布的内容没有用作递归函数。我试图用递归函数替换此代码,但我无法:(谢谢,你的回答帮助我找到解决方案,非常感谢:):Dyw,如果你愿意,请接受它,问题仍然是安静的