xml 子级中的图像名称超过一个并受到 php 的限制

我有 xml,另一个数组我得到了,但第一个数组不能我该如何解决这个问题


像这样的xml结构并在xml到php中获取错误代码第一个不是数组第二个是数组


我无法获得第一张图片,孩子们"sitename/11.jpg"


像这样的xml


 [images] => SimpleXMLElement Object ( [image] => Array ( [0] => sitename/15.jpg [1] => sitename/16.jpg [2] => sitename/17.jpg [3] => sitename/18.jpg ) ) )


 [images] => SimpleXMLElement Object ( [image] => sitename/11.jpg ))

<root>

<result>

<node>

<categories>somecategory<categories/>

<images>

<image>sitename/15.jpg</image><image>sitename/16.jpg</image><image>sitename/17.jpg</image><image>sitename/18.jpg</image>

</images>

</node>

<node>

<categories>somecategory<categories/>

<images>

<image>sitename/11.jpg</image>

</images>

</node>

  </result>

      </root>



function solve_something($xml, $destination)

{

    $xml = simplexml_load_file($xml, "SimpleXMLElement", LIBXML_NOCDATA);

    $json = json_encode($xml);

    $items = json_decode($json, TRUE);

    $products = array();

    $product_data = array();

    $row = 1;

foreach ($items['result']['node'] as $item) {

    $product_data['Categories'] = 'categories';

    if (isset($item['images']['image'])) {

        if (is_array($item['images']['image'])) {

            foreach ($item['images']['image'] as $key => $image) {

                $key++;

                if ($key <= 4) {

                    $image_name = 'image' . $key;

                    $product_data[$image_name] = isset($image) ? $image : null;

                }

            }

        } else {

            $product_data['image'] = isset($image) ? $image : null;

        }

    }


$path = createXML($products, $destination);

return $path;

}



潇湘沐
浏览 61回答 1
1回答

HUH函数

代码有几个问题如果你想要3张图片,这部分if ($key <= 4) {应该小于或等于2。save当您编写文件时,函数返回时,您实际上不必返回任何内容(或者您想检查是否为 false)the number of bytes written or false if an error occurred.在 foreach 中像这样使用$key++;也可以使用 for 循环来完成,您可以在$i其中附加image不知道你为什么要使用,createCDATASection但我已经保留了该部分以获得所需的结果由于 的多个部分node,您可以$product_data在每次迭代中使用一个数组来将值添加到 foreach 添加到数组中以及之后添加$product_data到$products数组中,以防止覆盖每个循环的值。更新后的代码可能看起来像function solve_something($xml, $destination){&nbsp; &nbsp; $xml = simplexml_load_string($xml, "SimpleXMLElement", LIBXML_NOCDATA);&nbsp; &nbsp; $json = json_encode($xml);&nbsp; &nbsp; $items = json_decode($json, TRUE);&nbsp; &nbsp; $products = array();&nbsp; &nbsp; foreach ($items['result']['node'] as $item) {&nbsp; &nbsp; &nbsp; &nbsp; $product_data = array();&nbsp; &nbsp; &nbsp; &nbsp; $category = $item["categories"];&nbsp; &nbsp; &nbsp; &nbsp; $product_data["categories"] = $category;&nbsp; &nbsp; &nbsp; &nbsp; if (isset($item['images']['image'])) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (is_array($item['images']['image'])) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; for ($i = 0; $i < count($item['images']['image']); $i++) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if ($i < 3) $product_data["image" . ($i + 1)] = $item['images']['image'][$i];&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; } else $product_data["image1"] = $item['images']['image'];&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; $products[] = $product_data;&nbsp; &nbsp; }&nbsp; &nbsp; createXML($products, $destination);}function createXML($data, $destination){&nbsp; &nbsp; $xmlDoc = new DOMDocument('1.0', 'UTF-8');&nbsp; &nbsp; $root = $xmlDoc->appendChild($xmlDoc->createElement("root"));&nbsp; &nbsp; foreach ($data as $key => $product) {&nbsp; &nbsp; &nbsp; &nbsp; $productA = $root->appendChild($xmlDoc->createElement('product'));&nbsp; &nbsp; &nbsp; &nbsp; $imagesElm = $xmlDoc->createElement('images');&nbsp; &nbsp; &nbsp; &nbsp; foreach ($product as $key1 => $val) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if ($key1 == 'price' || $key1 == 'tax' || $key1 == 'stockAmount' || $key1 === "categories") {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $productA->appendChild($xmlDoc->createElement($key1, $val));&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; } elseif (substr($key1, 0, 5) === "image") {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $imagesElm->appendChild($xmlDoc->createElement($key1, $val));&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; $productA->appendChild($imagesElm);&nbsp; &nbsp; }&nbsp; &nbsp; $xmlDoc->formatOutput = true;&nbsp; &nbsp; $xmlDoc->save($destination);}$xml = <<<XML<?xml version="1.0" encoding="utf-8"?><root>&nbsp; &nbsp; <result>&nbsp; &nbsp; &nbsp; &nbsp; <node>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <categories>somecategory</categories>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <images>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <image>sitename/15.jpg</image>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <image>sitename/16.jpg</image>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <image>sitename/17.jpg</image>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <image>sitename/18.jpg</image>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </images>&nbsp; &nbsp; &nbsp; &nbsp; </node>&nbsp; &nbsp; &nbsp; &nbsp; <node>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <categories>somecategory</categories>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <images>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <image>sitename/11.jpg</image>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </images>&nbsp; &nbsp; &nbsp; &nbsp; </node>&nbsp; &nbsp; </result></root>XML;solve_something($xml, "result.xml");xmlresult.xml看起来像<?xml version="1.0" encoding="UTF-8"?><root>&nbsp; <product>&nbsp; &nbsp; <categories>somecategory</categories>&nbsp; &nbsp; <images>&nbsp; &nbsp; &nbsp; <image1>sitename/15.jpg</image1>&nbsp; &nbsp; &nbsp; <image2>sitename/16.jpg</image2>&nbsp; &nbsp; &nbsp; <image3>sitename/17.jpg</image3>&nbsp; &nbsp; </images>&nbsp; </product>&nbsp; <product>&nbsp; &nbsp; <categories>somecategory</categories>&nbsp; &nbsp; <images>&nbsp; &nbsp; &nbsp; <image1>sitename/11.jpg</image1>&nbsp; &nbsp; </images>&nbsp; </product></root>
打开App,查看更多内容
随时随地看视频慕课网APP