长度未定义的嵌套数组:获取最多的嵌套数组

时间:2018-11-06 11:27:03

标签: php arrays laravel loops multidimensional-array

我正在向API发送请求,对于每个请求,我都会得到一个带有BrowseNode的数组。在此数组中,我得到以下结果:

array:1 [
  "BrowseNode" => array:3 [
    "BrowseNodeId" => "2502033031"
    "Name" => "OBD-II Diagnosewerkzeuge"
    "Ancestors" => array:1 [
      "BrowseNode" => array:3 [
        "BrowseNodeId" => "5142250031"
        "Name" => "Motorwerkzeuge & Zubehör"
        "Ancestors" => array:1 [
          "BrowseNode" => array:3 [
            "BrowseNodeId" => "2502064031"
            "Name" => "Werkzeuge"
            "Ancestors" => array:1 [
              "BrowseNode" => array:4 [
                "BrowseNodeId" => "79899031"
                "Name" => "Kategorien"
                "IsCategoryRoot" => "1"
                "Ancestors" => array:1 [
                  "BrowseNode" => array:2 [
                    "BrowseNodeId" => "78191031"
                    "Name" => "Auto & Motorrad"
                  ]
                ]
              ]
            ]
          ]
        ]
      ]
    ]
  ]
]

如果这将是一个始终具有此长度的固定数组,那么对我来说很容易获得最后一个BrowseNode Array和带有键“ Name”的值。在这种情况下,它就是这个"Name" => "Auto & Motorrad"

但是,由于类别可以具有一个或多个嵌套数组,因此它不是静态的...

这意味着我必须找到一种解决方案,以始终获取嵌套最多的数组,并从该数组中获取名称以获取类别。因为它是动态数据,所以我不知道如何解决那。我只知道我总是必须先获取BrowseNode,然后再获取BrowseNode数组中。我必须再次获得Ancestors并在此Ancestors中。我必须获取BrowseNode数组,直到到达最后一个BrowseNode数组并获取名称。

因此,我必须遍历我的数组,直到BrowseNode数组不再具有Ancestors数组并获得此BrowseNode数组的名称为止。

你们对如何执行此操作有任何想法吗?

2 个答案:

答案 0 :(得分:1)

我想您可以使用递归来实现。

在每个对象上搜索/usr/include/c++/7/ext/new_allocator.h:136:4: error: use of deleted function ‘std::pair<_T1, _T2>::pair(const std::pair<_T1, _T2>&) [with _T1 = const int; _T2 = std::unique_ptr<int>]’ { ::new((void *)__p) _Up(std::forward<_Args>(__args)...); } ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ,如果找不到则返回名称,否则在祖先上再次搜索。

考虑以下代码:

Ancestors

请注意,这段代码返回的是$arr = array("BrowseNode" => array("BrowseNodeId" => "1", "Ancestors" => array("BrowseNode" => array("BrowseNodeId" => "2", "Ancestors" => array("BrowseNode" => array("BrowseNodeId" => "3")))))); function getLastName($elem) { $elem = $elem["BrowseNode"]; if (!array_key_exists("Ancestors", $elem)) return $elem['BrowseNodeId']; else return getLastName($elem["Ancestors"]); } echo getLastName($arr); ,而不是您的id,这是我的小修改……

答案 1 :(得分:0)

可能会有更“正确”的方法来执行此操作,但是由于我是在飞机上的手机上编写此代码的,因此您必须原谅我无法证明我的回答。但是您可以执行递归函数,例如...

function recurseArray($browseNode) 
{
    if(isset($browseNode["Ancestors"])) {
        recurseArray($browseNode["Ancestors"]["browseNode"])
    } else {
        // Do whatever you want with the last iteration
    }
}

希望如此!