【发布时间】:2021-05-11 21:44:46
【问题描述】:
我有一个这样的数组:
object(SimpleXMLElement)#29 (1) {
["CATEGORY"]=>
object(SimpleXMLElement)#30 (4) {
["CATEGORY_ID"]=>
string(1) "1"
["CATEGORY_NAME"]=>
string(39) "Дамски дрехи и обувки"
["CATEGORY_FULLNAME"]=>
string(39) "Дамски дрехи и обувки"
["CATEGORY"]=>
object(SimpleXMLElement)#31 (4) {
["CATEGORY_ID"]=>
string(3) "180"
["CATEGORY_NAME"]=>
string(23) "Дамски дрехи"
["CATEGORY_FULLNAME"]=>
string(76) "Glami.bg | Дамски дрехи и обувки | Дамски дрехи"
["CATEGORY"]=>
array(2) {
[0]=>
object(SimpleXMLElement)#32 (4) {
["CATEGORY_ID"]=>
string(3) "184"
["CATEGORY_NAME"]=>
string(10) "Рокли"
["CATEGORY_FULLNAME"]=>
string(89) "Glami.bg | Дамски дрехи и обувки | Дамски дрехи | Рокли"
["CATEGORY"]=>
object(SimpleXMLElement)#34 (3) {
["CATEGORY_ID"]=>
string(5) "78355"
["CATEGORY_NAME"]=>
string(25) "Спортни рокли"
["CATEGORY_FULLNAME"]=>
string(123) "Glami.bg | Дамски дрехи и обувки | Дамски дрехи | Рокли | Спортни рокли
"
}
}
[1]=>
object(SimpleXMLElement)#33 (3) {
["CATEGORY_ID"]=>
string(3) "234"
["CATEGORY_NAME"]=>
string(8) "Поли"
["CATEGORY_FULLNAME"]=>
string(87) "Glami.bg | Дамски дрехи и обувки | Дамски дрехи | Поли"
}
}
}
}
}
通过递归,我试图在另一个数组中获取所有类别和子类别,并为每个子类别设置CATEGORY_PARENT_ID。
$values = [];
foreach ($xml as $item) {
$item = (array)$item;
$values[] = [
'CATEGORY_ID' => $item['CATEGORY_ID'],
'CATEGORY_NAME' => $item['CATEGORY_NAME'],
'CATEGORY_FULLNAME' => $item['CATEGORY_FULLNAME'],
'CATEGORY_PARENT_ID' => null
];
if (!isset($item['CATEGORY'])) {
continue;
} else
$this->getSubCategories($item['CATEGORY'], $item['CATEGORY_ID'], $values);
}
var_dump($values);die;
private function getSubCategories($category, $parent_id, &$values)
{
$category = (array)$category[0];
if (!$category) {
return false;
}
$values[] = [
'CATEGORY_ID' => $category['CATEGORY_ID'],
'CATEGORY_NAME' => $category['CATEGORY_NAME'],
'CATEGORY_FULLNAME' => $category['CATEGORY_FULLNAME'],
'CATEGORY_PARENT_ID' => $parent_id
];
if (!isset($category['CATEGORY'])) {
return false;
}
return $this->getSubCategories($category['CATEGORY'], $category['CATEGORY_ID'], $values);
}
问题是当递归命中78355 子类别时,它不会返回,我无法获得234 类别。我知道这是因为我知道我返回的是假的。但不明白如何使脚本正确。它的当前输出是(缺少234 项):
array(4) {
[0]=>
array(4) {
["CATEGORY_ID"]=>
string(1) "1"
["CATEGORY_NAME"]=>
string(39) "Дамски дрехи и обувки"
["CATEGORY_FULLNAME"]=>
string(39) "Дамски дрехи и обувки"
["CATEGORY_PARENT_ID"]=>
NULL
}
[1]=>
array(4) {
["CATEGORY_ID"]=>
string(3) "180"
["CATEGORY_NAME"]=>
string(23) "Дамски дрехи"
["CATEGORY_FULLNAME"]=>
string(76) "Glami.bg | Дамски дрехи и обувки | Дамски дрехи"
["CATEGORY_PARENT_ID"]=>
string(1) "1"
}
[2]=>
array(4) {
["CATEGORY_ID"]=>
string(3) "184"
["CATEGORY_NAME"]=>
string(10) "Рокли"
["CATEGORY_FULLNAME"]=>
string(89) "Glami.bg | Дамски дрехи и обувки | Дамски дрехи | Рокли"
["CATEGORY_PARENT_ID"]=>
string(3) "180"
}
[3]=>
array(4) {
["CATEGORY_ID"]=>
string(5) "78355"
["CATEGORY_NAME"]=>
string(25) "Спортни рокли"
["CATEGORY_FULLNAME"]=>
string(123) "Glami.bg | Дамски дрехи и обувки | Дамски дрехи | Рокли | Спортни рокли
"
["CATEGORY_PARENT_ID"]=>
string(3) "184"
}
}
编辑用于测试的 XML:
<?xml version="1.0" encoding="UTF-8"?>
<GLAMI>
<CATEGORY>
<CATEGORY_ID>1</CATEGORY_ID>
<CATEGORY_NAME>Дамски дрехи и обувки</CATEGORY_NAME>
<CATEGORY_FULLNAME>Дамски дрехи и обувки</CATEGORY_FULLNAME>
<CATEGORY>
<CATEGORY_ID>180</CATEGORY_ID>
<CATEGORY_NAME>Дамски дрехи</CATEGORY_NAME>
<CATEGORY_FULLNAME>Glami.bg | Дамски дрехи и обувки | Дамски дрехи</CATEGORY_FULLNAME>
<CATEGORY>
<CATEGORY_ID>184</CATEGORY_ID>
<CATEGORY_NAME>Рокли</CATEGORY_NAME>
<CATEGORY_FULLNAME>Glami.bg | Дамски дрехи и обувки | Дамски дрехи | Рокли</CATEGORY_FULLNAME>
<CATEGORY>
<CATEGORY_ID>78355</CATEGORY_ID>
<CATEGORY_NAME>Спортни рокли</CATEGORY_NAME>
<CATEGORY_FULLNAME>Glami.bg | Дамски дрехи и обувки | Дамски дрехи | Рокли | Спортни рокли
</CATEGORY_FULLNAME>
</CATEGORY>
</CATEGORY>
<CATEGORY>
<CATEGORY_ID>234</CATEGORY_ID>
<CATEGORY_NAME>Поли</CATEGORY_NAME>
<CATEGORY_FULLNAME>Glami.bg | Дамски дрехи и обувки | Дамски дрехи | Поли</CATEGORY_FULLNAME>
</CATEGORY>
</CATEGORY>
</CATEGORY>
</GLAMI>
【问题讨论】:
-
您的数据可能是 XML,而不是数组。您能否展示 XML 以便我们有一个基础进行测试?
-
是的,准备好了。你可以看看帖子底部