Ma petite solution ( à modifier légèrement ) fessait déjà le job : (j'ai traduit {9, { {6, {3,2}}, {6, {3,2}} } } en fonction de ton exemple)
@Zeppelin: Si tu veux avoir l'identifiant en clef de ton tableau, tu n'y arriveras pas, puisque que cela est strictement impossible, il est impossible de tenter de mettre 2 choses dans une même case. Hormis la solution que je te propose, il y a bien une autre solution plus compliquer à mettre en place, en cas de doublons non pas créer une simple array mais 2 array imbriqué les deux chemins.
PS : je ne me suis pas trop pencher sur la réponse précédente
[EDIT] Il ne veut pas éliminer les doublons bien au contraire
array(2) {
[0] => 9,
[1] => array(2){
[0] => array(2){
[0] => 6,
[1] => array(2){
[0] => array(2){
[0] => 3,
[1] => array(0)
},
[1] => array(2){
[0] => 2,
[1] => array(0)
}
}
},
[1] => array(2){
[0] => 6,
[1] => array(2){
[0] => array(2){
[0] => 3,
[1] => array(0)
},
[1] => array(2){
[0] => 2,
[1] => array(0)
}
}
}
}
}
@Zeppelin: Si tu veux avoir l'identifiant en clef de ton tableau, tu n'y arriveras pas, puisque que cela est strictement impossible, il est impossible de tenter de mettre 2 choses dans une même case. Hormis la solution que je te propose, il y a bien une autre solution plus compliquer à mettre en place, en cas de doublons non pas créer une simple array mais 2 array imbriqué les deux chemins.
<?php
class Item
{
private $id;
public function __construct($id)
{
$this->id = $id;
}
public function getRequiresRecursive()
{
$requires_id = ItemsConfig::getInstance()->getRequires($this->id); // doit retourner array() vide si pas de parents
$parents = array();
$temp = -1;
$identique = false;
// Je suppose qu'il y aura toujours 2 objets max
foreach($requires_id as $rid)
{
$parent = new self($rid);
if($temp == -1)
{
$temp = $rid;
$parents[$rid] = $parent->getRequiresRecursive();
}
else if($temp == $rid)
{
$parents[$rid] = array($parents[$rid], );
}
else
{
$parents[$rid] = $parent->getRequiresRecursive();
}
}
return $parents;
}
}
Avec cette solution ( à améliorer ) en cas de doublon tu trouveras un array contenant 2 arrays permettant ainsi de savoir s'il y a une fusion de 2 objets (identique ou presque)PS : je ne me suis pas trop pencher sur la réponse précédente
[EDIT] Il ne veut pas éliminer les doublons bien au contraire