不同的阵列结构和破坏foreach

时间:2014-08-18 00:25:45

标签: php arrays types difference

我从动态内容生成XML文件,但我得到2种数组类型来获取图像: 第一种数组类型是当图像超过1时,例如:

array(1) {
  ["Images"]=>
  array(3) {
    [0]=>
    array(2) {
      ["Url"]=>
      string(57) "http://example.net/image1.jpg"
      ["Default"]=>
      bool(true)
    }
    [1]=>
    array(2) {
      ["Url"]=>
      string(57) "http://example.net/image2.jpg"
      ["Default"]=>
      bool(false)
    }
    [2]=>
    array(2) {
      ["Url"]=>
      string(57) "http://example.net/image3.jpg"
      ["Default"]=>
      bool(false)
    }
  }
}

第二种类型是我只有1张图片,例如:

array(1) {
  ["Images"]=>
  array(2) {
    ["Url"]=>
    string(57) "http://example.net/image111.jpg"
    ["Default"]=>
    bool(true)
  }
}

如何使第二种类型使用第一个数组的类型,因为当我使用foreach循环这些数组时,内容存在问题。有什么功能可以解决这个问题吗?!

修改 现在这是foreach,它起作用了:

$productImages = $product->appendChild($this->_xmlDoc->createElement('ProductImages'));
if(isset($productInfo['ProductImages'])) {
    foreach($productInfo['ProductImages']['Images'] as $image) {
        if(!is_array($image) && is_string($image)) {
            $productImage = $productImages->appendChild($this->_xmlDoc->createElement('ProductImage'));
            $productImage->appendChild($this->_xmlDoc->createElement('ImagePath', $image));
        }
        if(isset($image['Url']) && is_array($image)) {
            $productImage = $productImages->appendChild($this->_xmlDoc->createElement('ProductImage'));
            $productImage->appendChild($this->_xmlDoc->createElement('ImagePath', $image['Url']));
        }
    }
}

这是foreach在我的问题后20分钟看起来的样子。所以我会投票给第一个答案,因为它类似于我的工作:)

干杯, 的Georgi!

1 个答案:

答案 0 :(得分:0)

在使用SOAP调用之前,我遇到了同样的问题。您不需要更改阵列的结构。您可以使用is_array简单地更改foreach循环的行为。它检查变量是否是数组。例如,使用您的数组:

$first_array = array(
    "Images" => array(
        array("Url" => "http://example.net/image1.jpg", "Default" => true),
        array("Url" => "http://example.net/image2.jpg", "Default" => false),
        array("Url" => "http://example.net/image3.jpg", "Default" => false)
    )
);

$second_array = array(
    "Images" => array(
        "Url" => "http://example.net/image111.jpg",
        "Default" => true
    )
);

echo "Results on the first array:<br />";

foreach ($first_array["Images"] as $element) {
    if (is_array($element)) {
        foreach ($element as $value) {
            echo $value . "<br />";
        }
    } else {
        echo $element . "<br />";
    }
}

echo "<br />";
echo "Result on the second array:<br />";

foreach ($second_array["Images"] as $element) {
    if (is_array($element)) {
        foreach ($element as $value) {
            echo $value . "<br />";
        }
    } else {
        echo $element . "<br />";
    }
}

PHPFiddle链接:http://phpfiddle.org/main/code/4y8j-4jd1