Foreach没有显示多个变量

时间:2012-11-12 18:22:08

标签: php xml foreach

目前我有以下代码但由于某种原因它只输出一个项目

基本上我试图做的是说foreach mainPropertyUrl创建一个列表foreach列表但由于某种原因我只回来一个ListingId

主要Feed位于 - http://api.trademe.co.nz/v1/Member/4389666/Listings/All.xml

PHP:

 $mainXmlUrl = simplexml_load_file("http://api.trademe.co.nz/v1/Member/4389666/Listings/All.xml");

 $listing = $mainXmlUrl->List->Listing;

 $mainPropertyUrl = simplexml_load_file("http://api.trademe.co.nz/v1/Listings/$listing->ListingId.xml");

在我的HTML中,我尝试过一般的foreach循环,但没有使用$url变量,因为我不确定如何使用适用于一个列表的代码来实现它。

我还试图创建一个列表ID数组,但它没有显示数据:

$ListingArray = array();

            foreach ($listing[0] as $id) {

                $IDNum = $id->ListingId;

                $ListingArray[] = $IDNum;
            }

            var_dump($ListingArray);

HTML Snippit:

<?php foreach ($mainPropertyUrl as $url): ?>

<div class="listingContainer">
<h2><?php echo $tradeMePropertyAddressFull;?></h2>
<div class="listingAttributes">
<div class="col0">
<span class="name"><?php echo $mainPropertyDetails[0]->Attribute[0]->DisplayName;?>:</span>
<span class="value"><?php echo $tradeMePropertyBathrooms[0];?></span>

2 个答案:

答案 0 :(得分:0)

尝试:

$mainPropertyUrl = simplexml_load_file("http://api.trademe.co.nz/v1/Listings/{$listing->ListingId}.xml");

您需要将{}放在对象访问语法周围。

更新:

$listing是一个数组,所以你的循环应该是:

foreach($listing as $l) {
    $ListingArray[] = "$l->ListingId";
}

答案 1 :(得分:0)

您的$ mainXmlUrl以简短格式包含多个列表的列表。对于每个列表,您需要使用新的ListingId调用$ mainPropertyUrl以获取该特定列表的详细信息。

您可以遍历$ mainXmlUrl-&gt; List-&gt;列表,并且在每个节点上,您将能够将ListingId作为属性进行检索。

$mainXmlUrl = simplexml_load_file("http://api.trademe.co.nz/v1/Member/4389666/Listings/All.xml");

$listingIds = array();

foreach ($mainXmlUrl->List->Listing as $listing) {
    // $listing->ListingId is actually an XML object that has a __toString method.
    // Hence the type casting below.
    $listingIds[] = (string) $listing->ListingId;
}

print_r($listingIds);

要检索有关每个商家信息的详细信息,您需要在每个商家信息ID上调用mainPropertyUrl。

$mainXmlUrl = simplexml_load_file("http://api.trademe.co.nz/v1/Member/4389666/Listings/All.xml");

foreach ($mainXmlUrl->List->Listing as $listing) {
    $mainPropertyUrl = simplexml_load_file("http://api.trademe.co.nz/v1/Listings/{$listing->ListingId}.xml");

    // $mainPropertyUrl is an XML object containing the detailed information on one listing
    print_r($mainPropertyUrl);
}

这将导致对每个属性进行单独的API调用,因此如果TradeMe限制了您在给定时间段内可以提出的请求数,请注意API速率限制。

可能有一种方法可以在一次点击中检索多个商品详情,这比为产品列表点击一次API效率要高得多,然后再次针对该结果中的每个商家信息。您需要查阅他们的文档,因为我不熟悉此API。

$mainXmlUrl = simplexml_load_file("http://api.trademe.co.nz/v1/Member/4389666/Listings/All.xml");

foreach ($mainXmlUrl->List->Listing as $listing) {
    $mainPropertyUrl = simplexml_load_file("http://api.trademe.co.nz/v1/Listings/{$listing->ListingId}.xml");

    echo '<div class="listingContainer">';
    foreach ($mainPropertyUrl->Attributes->Attribute as $attribute) {
        echo '<span class="name">'.$attribute->DisplayName.':</span>';
        echo '<span class="value">'.$attribute->Value.'</span>';
    }
}