2014-11-26 3 views
1

я многомерные массивы с различными структурами как эти:PHP получить значение по ключу из различных структурированных многомерных массивов

массива 1:

array(1) { 
    ["BrowseNode"]=> 
    array(3) { 
    ["BrowseNodeId"]=> 
    string(9) "364935031" 
    ["Name"]=> 
    string(17) "Taschen & Schalen" 
    ["Ancestors"]=> 
    array(1) { 
     ["BrowseNode"]=> 
     array(3) { 
     ["BrowseNodeId"]=> 
     string(9) "364918031" 
     ["Name"]=> 
     string(13) "Handyzubehör" 
     ["Ancestors"]=> 
     array(1) { 
      ["BrowseNode"]=> 
      array(3) { 
      ["BrowseNodeId"]=> 
      string(10) "1384526031" 
      ["Name"]=> 
      string(17) "Handys & Zubehör" 
      ["Ancestors"]=> 
      array(1) { 
       ["BrowseNode"]=> 
       array(4) { 
       ["BrowseNodeId"]=> 
       string(6) "569604" 
       ["Name"]=> 
       string(10) "Kategorien" 
       ["IsCategoryRoot"]=> 
       string(1) "1" 
       ["Ancestors"]=> 
       array(1) { 
        ["BrowseNode"]=> 
        array(2) { 
        ["BrowseNodeId"]=> 
        string(6) "562066" 
        ["Name"]=> 
        string(17) "Elektronik & Foto" 
        } 
       } 
       } 
      } 
      } 
     } 
     } 
    } 
    } 
} 

массив 2:

array(1) { 
    ["BrowseNode"]=> 
    array(2) { 
    [0]=> 
    array(4) { 
     ["BrowseNodeId"]=> 
     string(9) "122877031" 
     ["Name"]=> 
     string(6) "Düfte" 
     ["Children"]=> 
     array(1) { 
     ["BrowseNode"]=> 
     array(6) { 
      [0]=> 
      array(2) { 
      ["BrowseNodeId"]=> 
      string(10) "2795107031" 
      ["Name"]=> 
      string(5) "Damen" 
      } 
      [1]=> 
      array(2) { 
      ["BrowseNodeId"]=> 
      string(10) "2795100031" 
      ["Name"]=> 
      string(6) "Herren" 
      } 
      [2]=> 
      array(2) { 
      ["BrowseNodeId"]=> 
      string(10) "4695227031" 
      ["Name"]=> 
      string(19) "Kerzen & Raumdüfte" 
      } 
      [3]=> 
      array(2) { 
      ["BrowseNodeId"]=> 
      string(10) "2795099031" 
      ["Name"]=> 
      string(6) "Kinder" 
      } 
      [4]=> 
      array(2) { 
      ["BrowseNodeId"]=> 
      string(9) "591313031" 
      ["Name"]=> 
      string(18) "Parfümzerstäuber" 
      } 
      [5]=> 
      array(2) { 
      ["BrowseNodeId"]=> 
      string(9) "591280031" 
      ["Name"]=> 
      string(4) "Sets" 
      } 
     } 
     } 
     ["Ancestors"]=> 
     array(1) { 
     ["BrowseNode"]=> 
     array(4) { 
      ["BrowseNodeId"]=> 
      string(8) "84231031" 
      ["Name"]=> 
      string(10) "Kategorien" 
      ["IsCategoryRoot"]=> 
      string(1) "1" 
      ["Ancestors"]=> 
      array(1) { 
      ["BrowseNode"]=> 
      array(2) { 
       ["BrowseNodeId"]=> 
       string(8) "84230031" 
       ["Name"]=> 
       string(6) "Beauty" 
      } 
      } 
     } 
     } 
    } 
    [1]=> 
    array(3) { 
     ["BrowseNodeId"]=> 
     string(9) "161329031" 
     ["Name"]=> 
     string(11) "Lidschatten" 
     ["Ancestors"]=> 
     array(1) { 
     ["BrowseNode"]=> 
     array(3) { 
      ["BrowseNodeId"]=> 
      string(9) "161320031" 
      ["Name"]=> 
      string(5) "Augen" 
      ["Ancestors"]=> 
      array(1) { 
      ["BrowseNode"]=> 
      array(3) { 
       ["BrowseNodeId"]=> 
       string(9) "122880031" 
       ["Name"]=> 
       string(7) "Make-Up" 
       ["Ancestors"]=> 
       array(1) { 
       ["BrowseNode"]=> 
       array(4) { 
        ["BrowseNodeId"]=> 
        string(8) "84231031" 
        ["Name"]=> 
        string(10) "Kategorien" 
        ["IsCategoryRoot"]=> 
        string(1) "1" 
       } 
       } 
      } 
      } 
     } 
     } 
    } 
    } 
} 

Is есть способ, которым я могу получить все значения от Name ключей к строке? Я видел по крайней мере 30 различных структур до сих пор, так что невозможно точно петли массивов

+0

Пьер Maniche IST Эйн Клейнер Kelleraffe ^^ – Matt123456

ответ

0

Этот массив организован как дерево. Деревья лучше всего обрабатываются рекурсивной функцией. Это будет делать: выход

function extract_Name($arr, $path, &$result) 
{ 
    foreach ($arr as $k => $v) 
    { 
     if ($k == "Name") 
     { 
      $result[$path . "/" . $k] = $v; 
     } 
     else if (is_array($v)) 
     { 
      extract_Name($v, $path . "/" . $k, $result); 
     } 
    } 
} 

$result = array(); 
extract_Name($your_struc, "", $result); 

var_dump($result); 

Пример:

array(5) { 
    ["/BrowseNode/Name"]=> 
    string(17) "Taschen & Schalen" 
    ["/BrowseNode/Ancestors/BrowseNode/Name"]=> 
    string(13) "Handyzubehör" 
    ["/BrowseNode/Ancestors/BrowseNode/Ancestors/BrowseNode/Name"]=> 
    string(17) "Handys & Zubehör" 
    ["/BrowseNode/Ancestors/BrowseNode/Ancestors/BrowseNode/Ancestors/BrowseNode/Name"]=> 
    string(10) "Kategorien" 
    ["/BrowseNode/Ancestors/BrowseNode/Ancestors/BrowseNode/Ancestors/BrowseNode/Ancestors/BrowseNode/Name"]=> 
    string(17) "Elektronik & Foto" 
} 

Если вы хотите только имена без пути, который ведет к ним, вы можете просто заменить:

$result[$path . "/" . $k] = $v; 

с:

$result[] = $v; 

Outp ет в этом случае будет:

array(5) { 
    [0]=> 
    string(17) "Taschen & Schalen" 
    [1]=> 
    string(13) "Handyzubehör" 
    [2]=> 
    string(17) "Handys & Zubehör" 
    [3]=> 
    string(10) "Kategorien" 
    [4]=> 
    string(17) "Elektronik & Foto" 
} 
+0

Это удивительное спасибо! – Matt123456

Смежные вопросы