1

500 以上のアイテムを含む長い xml データ ファイルがあり、次の形式になっています。

<?xml version="1.0" encoding="ISO-8859-1"?>
<CATALOG>
<ITEM>
    <TITLE>ITEM name</TITLE>
    <TYPE>"T1", "T2", "T3" </TYPE>
    <DESCIPTION>DESCIPTIONiliate Page CPM</DESCIPTION>
    <PRICE>PRICE</PRICE>
    <ITEM>http://mysite.com/item-link</ITEM>
</ITEM>
</CATALOG>

そして、php ページで次のコードを使用して、xml ファイルからデータをインポートします。

<?php
$ITEMSS = new SimpleXMLElement('ITEMS.xml', null, true);

echo <<<EOF
<table width="100%" align="center" border="1" bordercolor="#0099ff" cellpadding="1" cellspacing="0">

    <tr>
            <th bgcolor="#66ccff"><span class="style4">ITEM Name</span></th>
            <th bgcolor="#66ccff"><span class="style4">item TYPE </span></th>
            <th bgcolor="#66ccff"><span class="style4">item DESCIPTION </span></th>
            <th bgcolor="#66ccff"><span class="style4">item PRICE</span></th>
            <th bgcolor="#66ccff"><span class="style4">link to item</span></th>
    </tr>

EOF;
foreach($ITEMSS as $ITEMS) // loop through our DATAS
{
    echo <<<EOF
    <tr height="30" align=middle>
            <td><a href="{$ITEMS->ITEM}" target="_blank"><span class="STYLE7">{$ITEMS->TITLE}</span></a></td>
            <td><span class="STYLE8">{$ITEMS->TYPE}</span></td>
            <td><span class="STYLE8">{$ITEMS->DESCIPTION}</span></td>
            <td><span class="STYLE8">{$ITEMS->PRICE}</span></td>
            <td><a href="{$ITEMS->ITEM}" target="_blank"><B><span class="STYLE7">cHECK IT OUT</span></B></a></td>
    </tr>

EOF;
}
echo '</table>';
?>

TYPE には、次のようなさまざまな値があります。

    <TYPE>"T1", "T2", "T3" </TYPE>
    <TYPE>"T1", "T4", "T6" </TYPE>
    <TYPE>"T1", "T8", "T1" </TYPE>

各項目は異なる TYPE 値を持つ場合があります

値が TYPE somethink の配列にある場合、一部のデータのみを選択するには、ループに「if」ステートメントを追加する必要があります。

foreach($ITEMSS as $ITEMS) // loop through our DATAS
{
$options = array($ITEMS->TYPE);

if (in_array("T1", $options))

   { echo <<<EOF
    <tr height="30" align=middle>
            <td><a href="{$ITEMS->ITEM}" target="_blank"><span class="STYLE7">{$ITEMS->TITLE}</span></a></td>
            <td><span class="STYLE8">{$ITEMS->TYPE}</span></td>
            <td><span class="STYLE8">{$ITEMS->DESCIPTION}</span></td>
            <td><span class="STYLE8">{$ITEMS->PRICE}</span></td>
            <td><a href="{$ITEMS->ITEM}" target="_blank"><B><span class="STYLE7">cHECK IT OUT</span></B></a></td>
    </tr>


EOF;
}

}

しかし、探している値が配列にある場合でも、何も表示されません!.

では、この場合、配列ステートメントで if を使用するにはどうすればよいでしょうか?

4

2 に答える 2

1

ループif内に句を配置する代わりに、探している要素のみを含む別のリストをに渡すだけです。魔法のように機能します。実際、これはxpathと呼ばれます。foreachforeach

$value = 'T1';
$list  = $ITEMSS->xpath('/CATALOG/ITEM[contains(TYPE, \'"' . $value . '"\')]');
foreach($list as $ITEMS)
{
    ...

以上です。これが機能するのは、検索する可能性のある各値が二重引用符"で囲まれているためです。これは一般的な原則です。

ところで、あなたのコードは、たとえばMustacheのような単純なテンプレートエンジンから多くの利益を得ると思います。イテレータ(繰り返し処理する値のリスト)でも同様に機能しますforeach

于 2012-09-22T16:47:47.257 に答える
1

問題は $options 変数の準備に起因します。そのように開始してみてください。

PHP >= 5.3

$options = array_map(function($type) {
    return str_replace('"', '', trim($type));
}, explode(',', $ITEMS->TYPE));

PHP < 5.3 (関数をループから外してください:D)

function parseTypes($type) {
    return str_replace('"', '', trim($type));
}

$options = array_map(parseTypes, explode(',', $ITEMS->TYPE));

これにより、型が配列に分解され、引用符が削除され、余分なスペースが削除されます。

于 2012-09-22T15:44:12.917 に答える