0

我正在尝试从 simpleXmlElement 构建一个新数组。我得到了我想要的信息,只是不在正确的层次结构中。

$xmlNew1 = new SimpleXMLElement($responseNew1);
$test = array();
foreach ($xmlNew1->children() as $newChild){
    $classIden[] = (string)$xmlNew1->class['id'];
    $item[] = (string)$xmlNew1->code;
    $family[] = (string)$xmlNew1->family;
    for($i=0, $count = count($classIden); $i < $count; $i++) {
        $test[$item[$i]][$family[$i]]= $classIden[$i];
    }
}

print_r($test);

这给了我:

Array
(
[9522] => Array
    (
        [Mens Hats] => 44
    )

[9522-NC-NO SIZE] => Array
    (
        [Mens Hats] => 44
    )

[B287CSQU] => Array
    (
        [Boys] => 1
    )

但我想要

Array
(
[9522] => Array
(
    [family] => Mens Hats
    [classId] => 44
)

有什么建议吗?谢谢!

4

2 回答 2

1

这可能应该这样做(以替换主循环内容):

$id = (string)$newChild->class['id'];
$code = (string)$newChild->code;
$family = (string)$newChild->family;

$items[$code] = array(
    'family' => $family,
    'classId' => $id,
);

编辑

忘记使用$newChild而不是$xmlNew1.

于 2012-08-14T04:24:43.830 回答
0

我不知道您的层次结构,因为我对 HTML 了解不多。你已经隐藏了结构。但是,您可能应该以您直接查找的格式构建数组。

让我们试着让它变得不那么复杂。假设您有一个包含所有孩子的变量。因此,您可以拆分迭代并加载这些子项。加载:

 $xmlNew1 = new SimpleXMLElement($responseNew1);
 $newChildren = $xmlNew1->children();

我不能说你是否$xmlNew1->children()足以让你得到你正在寻找的所有 xml 元素,但我们假设是这样。

下一部分是关于迭代的。如所写,您应该$test在迭代孩子时构建数组 - 正如您部分已经做过的那样:

$test = array();
foreach ($newChildren as $newChild) {
    ...
}

现在缺少的部分是在以下位置创建您的结构$test

Array(
    [9522] => Array(
        [family] => Mens Hats
        [classId] => 44
    )

我喜欢@Jack 在这里给出的建议,首先将要提取的值分配给它们自己的变量,然后创建条目。

$newItem = array(
    'family' => $family,
    'classId' => $id,
);
$test[$code] = $newItem;

自然,您必须将其放入迭代中。迭代完成后,$test数组应该具有您要查找的格式。

我希望这是有帮助的。

于 2012-08-14T08:00:05.093 回答