【问题标题】:foreach loop only dumping one variableforeach 循环只转储一个变量
【发布时间】:2013-05-04 06:14:36
【问题描述】:

我有以下代码来查找匹配 preg_match 的 xml 元素

foreach($xml->Items->Item->AlternateVersions->AlternateVersion->Binding as $BookBinding) { //loop through the xml data to find the correct ASIN for the kindle edition
    foreach ($xml->Items->Item->AlternateVersions->AlternateVersion->ASIN as $Kindlestring)
    {
        var_dump ($BookBinding);
        if (preg_match('/Kindle Edition/i',$BookBinding))
        {
            //do stuff
        }
    }
}

然而只是var_dumping Binding的第一个循环,怎么会呢?

【问题讨论】:

  • 没有看到你的数据很难说。先做一些基本的调试。添加一些 echo 语句以查看循环失败的位置。确保错误报告已打开。确保 XML 对象实际上允许您遍历您尝试迭代的元素。
  • @Brad 循环甚至没有进入 if 语句,我做了一个 var_dump,它只给了我 Binding 的第一个值,
  • 我猜你在 xml 中只有一项?
  • 不确定为什么要以这种方式遍历兄弟元素。当前版本的代码中未引用内部循环,因此也许您应该将其删除以使其更清晰。
  • @user2349095 什么是“为隐私而隐藏”?

标签: php xml


【解决方案1】:

我只是在这里猜测,因为我不知道 XML 的结构,但我的猜测是您在 XML 的错误部分上循环。这是我对你应该做什么的猜测:

foreach($xml->Items as $item) {
    $bookBinding  = $item->Item->AlternateVersions->AlternateVersion->Binding;
    $kindleString = $item->Item->AlternateVersions->AlternateVersion->ASIN;

    if (preg_match('/Kindle Edition/i',$BookBinding)) {
        //do stuff
    }
}

此外,看起来可能有多个 AlternateVersions,因此您可能需要像这样进行嵌套循环:

foreach ($xml->Items as $item) {
    foreach ($item->Item->AlternateVersions as $version) {
        $bookBinding  = $version->AlternateVersion->Binding;
        $kindleString = $version->AlternateVersion->ASIN;

        if (preg_match('/Kindle Edition/i',$BookBinding)) {
            //do stuff
        }
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-21
    • 2018-03-29
    • 2012-07-27
    • 2014-12-29
    • 2011-10-22
    • 2011-05-07
    • 2020-07-16
    相关资源
    最近更新 更多