PHP 按键从不同的结构化多维数组中获取值


PHP get values by key from different structured multidimensional arrays

>我得到具有不同结构的多维数组,如下所示:

阵列 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"
                }
              }
            }
          }
        }
      }
    }
  }
}

有没有办法将Name键中的所有值获取到字符串?到目前为止,我已经看到了至少 30 种不同的结构,因此不可能以严格的方式循环数组

该数组组织为树。树最好由递归函数处理。这将可以:

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;

在这种情况下,输出将是:

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"
}