2016-04-18 8 views
-1

Das ist mein Array:Wie kann ich nur bestimmte Ebenen aus einem mehrdimensionalen Array extrahieren?

array(1) { 
     ["farm"]=> 
     array(2) { 
     ["folder1"]=> 
     array(2) { 
      ["horse"]=> 
      array(1) { 
      ["fred.jpg"]=> 
      string(30) "farm/folder1/horse/fred.jpg" 
      } 
      ["cat"]=> 
      array(1) { 
      ["john.jpg"]=> 
      string(28) "farm/folder1/cat/john.jpg" 
      } 
     } 
     ["folder2"]=> 
     array(1) { 
      ["cat"]=> 
      array(2) { 
      ["sam.jpg"]=> 
      string(27) "farm/folder2/cat/sam.jpg" 
      ["cat"]=> 
      array(1) { 
       ["john.jpg"]=> 
       string(32) "farm/folder2/cat/cat/john.jpg" 
      } 
      } 
     } 
     } 
    } 

ich ein Array erstellen möchten, die nur das Niveau meines variable und seine untergeordneten Ebene zeigt.

Zum Beispiel, wenn mein Variable folder1 meine Array wie folgt aussehen soll:

  array(1) { 
      ["folder1"]=> 
      array(2) { 
       ["horse"]=> 
      string(0) "" //the value is not important, only the key 
       ["cat"]=> 
      string(0) "" 
      } 
     } 

Und wenn mein Variable sind farm das Ergebnis aussehen soll

array(1) { 
      ["farm"]=> 
      array(2) { 
      ["folder1"]=> 
      string(0) "" 
      ["folder2"]=> 
      string(0) ""  
      } 
     } 

Ich weiß wirklich nicht, wie es zu tun, ist so hier mein Experiment:

function myfunction($array, $var){ 
    $newArray = array(); 
    $newArray = $array[$var][0]; 
    return $newArray; 
} 

Mein Ergebnis ist NULL;

+0

Wenn Sie über meine Frage abstimmen, ich über ein Feedback freuen würde, was ich falsch gemacht habe. Vielen Dank :) – Jarla

Antwort

2

Sie können eine rekursive Funktion verwenden, um jede Ebene des Arrays nach dem gewünschten Schlüssel zu durchsuchen.

function get_key($haystack, $needle) { 
    if (is_array($haystack)) {      // don't search non-array values 
     foreach ($haystack as $key => $value) { 
      if ($key == $needle) {     // if searched key is found 
       if (is_array($value) { 
        foreach ($value as &$subvalue) { // set any child keys to '' 
         $subvalue = ''; 
        } 
       } 
       return array($needle => $value);  // and return the result. 

      } else {         // If it isn't found, 
       $result = get_key($value, $needle); // try to find it in the next level 
       if ($result) return $result;   // and return it if it's found. 
      } 
     } 
    } 
    // implicitly returns null if the key is not found 
} 

$result = get_key($your_array, 'folder1'); 
0

mit Try this:

function multiKeyArray(array $arr, $key) { 

     // is in base array? 
     if (array_key_exists($key, $arr)) { 
      return $arr[$key]; 
     } 

     // check arrays contained in this array 
     foreach ($arr as $element) { 
      if (is_array($element)) 
       return multiKeyArray($element, $key);    
     } 

     return false; 
} 

$result = multiKeyArray($input, 'farm'); 
Verwandte Themen