9
votes

PHP - Trouver la clé parent du tableau

J'essaie de trouver un moyen de retourner la valeur de la clé parent d'une array.

Par exemple, de la matrice ci-dessous, j'aimerais connaître la clé du parent où $ Array ["ID '] = = "0002". La clé parent est évidente car elle est définie ici (ce serait des "produits"), mais normalement, il serait dynamique, d'où le problème. L'identifiant et la valeur de 'id' est connue cependant. xxx


0 commentaires

3 Réponses :


2
votes

Étant donné que vous avez une structure d'arborescence d'un BFS ou DFS peut le faire. Étant donné que la structure est variable une solution récursive fonctionnerait bien. Retournez simplement une sentinelle lorsque vous trouvez la valeur, puis renvoyez la clé de l'appelant.


0 commentaires

3
votes

une petite récursion brute, mais cela devrait fonctionner: xxx


4 commentaires

Je ne suis pas trop familier avec la récursion, mais j'ai codé une réponse similaire à cela, seulement j'ai utilisé une variable "statique" pour remplacer l'argument parent que vous utilisez. Est-ce de toute façon meilleure?


@Alex statique fonctionnerait probablement aussi bien. Je dois admettre que je ne suis pas une grande partie d'un utilisateur statique . :) Cela éliminerait la nécessité de passer le long de la variable supplémentaire. OTOH, dans la fonction ci-dessus, vous pouvez spécifier un parent "par défaut" ... que ce soit, je suppose. :)


Merci, je comprends les avantages de votre méthode. +1


Je suis curieux, y a-t-il une meilleure structure de données à utiliser au lieu d'un tableau si on a ce besoin? Cela fait longtemps que j'avais une bonne formation de programmation, mais une liste liée aurait-elle mieux fonctionner? De cette façon, vous n'avez pas à rechercher dans un tableau à chaque fois que vous souhaitez un parent donné (pensez à renvoyer tous les parents d'un enfant jusqu'à la racine). Cependant, je n'ai pas encore d'utiliser réellement des listes liées dans PHP. Peut-être qu'ils ne sont pas si faciles à faire?



-2
votes
function array_to_xml($array, $rootElement = null, $xml = null) {

    $_xml = $xml;

    if ($_xml === null) {
        $_xml = new SimpleXMLElement($rootElement !== null ? $rootElement : '<root/>');
    }

    $has_int_key = 0;

    foreach ($array as $k => $v) {
        if (is_array($v)) {
            if(is_int($k)){
                $this->array_to_xml($v, $k, $_xml->addChild($rootElement));
            } 
            else {
                foreach($v as $key=>$value) {
                    if(is_int($key)) $has_int_key = 1;
                }

              if ($has_int_key) {
                  $this->array_to_xml($v, $k, $_xml);
              } else {
                  $this->array_to_xml($v, $k, $_xml->addChild($k));
              }
            }
        } 
        else {
            $_xml->addChild($k, $v);
        }
    }

    return $_xml->asXML();

}

0 commentaires