【问题标题】:Wrong Foreach cycle错误的 Foreach 循环
【发布时间】:2014-11-06 09:49:38
【问题描述】:

我的 foreach 循环有问题。但看起来我的知识还不足以找出问题所在。我的代码很简单:

   $xnl_file = "xml.xml";
    $xml = simplexml_load_file($xnl_file);
    $my_file = 0;
    foreach ($xml as $value){
        var_dump($value);
        $CountryOrganizationId = "<CountryOrganizationId>".$xml->Partnership->CountryOrganizationId."</CountryOrganizationId>";
        $PartnershipId = "<PartnershipId>".$xml->Partnership->PartnershipId."</PartnershipId>";
        $OwnerId = "<OwnerId>".$xml->Partnership->OwnerId."<OwnerId>";
        $PartnerIdList = "<PartnerIdList><String>".$xml->Partnership->PartnerIdList->String."</String></PartnerIdList>";
        $CountryOrganizationId_contact = "<Contract><CountryOrganizationId>".$xml->Partnership->Contract->CountryOrganizationId."</CountryOrganizationId>";
        $ContractId = "<ContractId>".$xml->Partnership->Contract->ContractId."</ContractId>";
        $data = "<Partnership>".$CountryOrganizationId.$PartnershipId.$OwnerId.$PartnerIdList.$CountryOrganizationId_contact.$ContractId.$Role1.$Category1.$Rate1.
        $Role2.$Category2.$Rate2.$Role3.$Category3.$Rate3."</Partnership>";
        echo $data;

}

我正在从 XML 获取数据并尝试在多个上解析它,但这只是一次又一次地复制相同的数据。我不确定我做错了什么。在我看来,数据应该在每次循环都做同样的事情时相互重写,但它们并没有改变。在 echo $data 我得到尽可能多的结果,问题是它们是一样的。

如果我在开始时 var_dump $value 我会得到很好的结果,即数据正在循环,但为什么输出总是相同?

有人可以给我建议吗?

谢谢

【问题讨论】:

  • 想要达到什么目的?我建议你看看simplexml_load_file 函数返回了什么。如果您在此处发布输出,我们将更有能力提供帮助。但请指定一个问题。
  • 看起来您在循环中使用的是 $xml 而不是 $value->Partnership。
  • 输出如下:`CZContract_58AB4635-D9C6-A04EMM-O-BDD15299MM-O-2A10BCFCZContract_58AB4635-D9C6-A04ELabor1250.0Paint2350.0Labor1250.0 ------------- -------------------------------------------------- ----- CZContract_58AB4635-D9C6-A04EMM-O-BDD15299MM-O-2A10BCFCZContract_58AB4635-D9C6-A04ELabor1250.0Paint2350.0Labor1250.0 ---------- ---------------------------------------------- CZContract_58AB4635-D9C6- A04EMM-O-BDD15299MM-O-2A10BCFCZContract_58AB4635-D9C6-A04ELabor1250.0Paint2350.0Labor1250.0 ------------------------------- --------------------------------------

标签: php foreach cycle


【解决方案1】:

从未使用过 $value 变量,您总是使用 $xml。试试看:

$xnl_file = "xml.xml";
$xml = simplexml_load_file($xnl_file);
$my_file = 0;
foreach ($xml as $value){
    var_dump($value);
    $CountryOrganizationId         = "<CountryOrganizationId>" . $value->CountryOrganizationId . "</CountryOrganizationId>";
    $PartnershipId                 = "<PartnershipId>" . $value->PartnershipId . "</PartnershipId>";
    $OwnerId                       = "<OwnerId>" . $value->OwnerId . "<OwnerId>";
    $PartnerIdList                 = "<PartnerIdList><String>" . $value->PartnerIdList->String . "</String></PartnerIdList>";
    $CountryOrganizationId_contact = "<Contract><CountryOrganizationId>" . $value->Contract->CountryOrganizationId . "</CountryOrganizationId>";
    $ContractId                    = "<ContractId>" . $value->Contract->ContractId . "</ContractId>";
    $data                          = "<Partnership>" . $CountryOrganizationId . $PartnershipId . $OwnerId . $PartnerIdList . $CountryOrganizationId_contact . 
                                     $ContractId . $Role1 . $Category1 . $Rate1 . $Role2 . $Category2 . $Rate2 . $Role3 . $Category3 . $Rate3 . 
                                    "</Partnership>"afdsf

    echo $data;
}

【讨论】:

  • 您好,谢谢您的回答。当然它有逻辑,我明白你的意思。问题是这会引发错误:注意:尝试获取非对象的属性:(
  • 你能把 var_dump($value); 的输出贴出来吗
  • pastebin.com/VM4EaDh7 我把它扔到了 pastebin,因为它的文本很大,无法添加到评论中。这个值当然是针对 XML 的每一部分
  • 我已经更新了代码。基本上,当您进行 foreach 时,您会在每个 Partnership 元素上进行 foreach,这是循环中的当前元素。您需要将每次出现的 $value->Partnership->{something_else} 替换为 $value->{something_else}。
【解决方案2】:

将 $data 连接到其先前的值 { $data .= "......"}

foreach ($xml as $value)
{
        var_dump($value);
        $CountryOrganizationId = "<CountryOrganizationId>".$xml->Partnership->CountryOrganizationId."</CountryOrganizationId>";
        $PartnershipId = "<PartnershipId>".$xml->Partnership->PartnershipId."</PartnershipId>";
        $OwnerId = "<OwnerId>".$xml->Partnership->OwnerId."<OwnerId>";
        $PartnerIdList = "<PartnerIdList><String>".$xml->Partnership->PartnerIdList->String."</String></PartnerIdList>";
        $CountryOrganizationId_contact = "<Contract><CountryOrganizationId>".$xml->Partnership->Contract->CountryOrganizationId."</CountryOrganizationId>";
        $ContractId = "<ContractId>".$xml->Partnership->Contract->ContractId."</ContractId>";

        $data .= "<Partnership>".$CountryOrganizationId.$PartnershipId.$OwnerId.$PartnerIdList.$CountryOrganizationId_contact.$ContractId.$Role1.$Category1.$Rate1.
        $Role2.$Category2.$Rate2.$Role3.$Category3.$Rate3."</Partnership>";
}
 echo $data;

【讨论】:

    猜你喜欢
    • 2019-01-14
    • 2018-01-22
    • 2013-12-18
    • 2014-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多