我正在向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
数组的名称为止。
你们对如何执行此操作有任何想法吗?
答案 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
}
}
希望如此!