2016-04-07 4 views
1

Das ist mein Array:Wie kann ich Eltern-, Großeltern- und Enkel-Schlüssel eines Array-Schlüssels in einem mehrdimensionalen Array abrufen?

array(1) { 
    ["farm"]=> 
    array(2) { 
    ["folder1"]=> 
    array(2) { 
     ["horse"]=> 
     array(1) { 
     ["fred"]=> 
     string(4) "fred" 
     } 
     ["cat"]=> 
     array(1) { 
     ["john"]=> 
     string(4) "john" 
     } 
    } 
    ["folder2"]=> 
    array(1) { 
     ["cat"]=> 
     array(2) { 
     ["sam"]=> 
     string(3) "sam" 
     ["cat"]=> 
     array(1) { 
      ["john"]=> 
      string(4) "john" 
     } 
     } 
    } 
    } 
} 

Dies ist meine Funktion:

$search = "folder1"; 
    get_values($arr); 

    function get_values($arr, $id){ 
     global $search; 
     foreach($arr as $key => $value){ 

      if($key == $search){ 

       if(is_array($value)){ 

        foreach($value as $k => $v) { 
         echo $k; 
        } 
       }   
      }else{ 
       get_values($value, $id); 
      }  
     }  
    } 

Mein Ergebnis:

horse 
cat 

Was nicht nur den Array-Schlüssel ich brauche. Ich möchte auch alle Eltern (Eltern, Großeltern bis zur Wurzel) Schlüssel drucken. Das Ergebnis würde ich brauchen:

farm/folder1/horse 
farm/folder1/cat 

Soweit ich ist diese bekommen konnte. Aber hier bekomme ich nur die Eltern nicht die großen und grandgrand Eltern:

foreach($value as $k => $v) { 
     echo $key."/".$k; 
    } 

Das Ergebnis ist

folder1/horse 
folder1/cat 

Antwort

1

einen Pfad Argument an die Funktion hinzuzufügen.

$search = "folder1"; 
get_values($arr, null); 

function get_values($arr, $path, $id){ 
    global $search; 
    foreach($arr as $key => $value){ 
     $basePath = $path === null ? $key : $path. "/" . $key; 
     if($key == $search){ 

      if(is_array($value)){ 

       foreach($value as $k => $v) { 
        echo $basePath . '/' . $k; 
       } 
      }   
     }else{ 
      get_values($value, $basePath, $id); 
     }  
    }  
} 
+0

Ja, das sieht gut aus! Danke :) Nur ein Problem: Mit deiner Funktion ist mein Ergebnis '1234/farm/folder1/horse' also ging die' id 'irgendwie an den Anfang des Pfades. Ich habe versucht, "$ ID" aus Ihrer Funktion zu entfernen, aber seltsamerweise ist es immer noch – Jarla

+1

das Problem ist wahrscheinlich in der Umgebung Code, die $ ID in dieser Funktion wird eigentlich nie verwendet, ich habe es nicht aus Ihrem Code – user3802077

+0

Es So habe ich die Funktion ausgeführt, mein Fehler! Also eigentlich ist alles in Ordnung! :) – Jarla

Verwandte Themen