0

次のPHPコードのスニペットは問題なく作成されますが、反復を実行するときに、見つかった$descすべての間に2つの空白スペースを導入するのが好きです。dpItemFeatureList

これを行うためにスニペットを追加する場所や場所を正確に把握できないようです。

function get_description($asin){
$url = 'http://www.amazon.com/gp/aw/d/' . $asin . '?d=f&pd=1';
$data = request_data($url);
$desc = '';

if ($data) {
    $dom = new DOMDocument();
    @$dom->loadHTML($data);
    $xpath = new DOMXPath($dom);
    if (preg_match('#dpItemFeaturesList#',$data)){
        $k = $xpath->query('//ul[@class="dpItemFeaturesList"]');
        foreach ($k as $c => $tot) {
            $desc .= $tot->nodeValue;
        }
    }
}
return $desc;
4

4 に答える 4

0

すべてをdescに追加しているので、次のようなものを試してください

$desc .= $tot->nodeValue;
$desc .= "<br />"
于 2012-12-31T12:39:53.650 に答える
0

それを試してください:

$desc .= $tot->nodeValue.'  ';

ループのtrim($desc)後に、最後に2つのスペースを避けます。

または、代わりに配列を作成します。

$desc = array();
//....
$desc[] = $tot->nodeValue;

そして戻るimplode(' ', $desc)

于 2012-12-31T12:40:39.040 に答える
0

ここで共有したコードを見て、その結果、処理しているデータ(ここに貼り付けたサンプル)を見て、実際にノードの<li>子要素内のテキストを収集する必要があります。<ul class="dpItemFeaturesList">

元のコードスニペットでは、XPathは次のようになります。

'//ul[@class="dpItemFeaturesList"]'

<ul>これにより、要素のみが選択され、子要素は選択されません。したがって、これを実行しようとすると、$tot->nodeValueすべての子ノード内のすべてのテキストがスペースなしで連結されます(ああ、そもそもスペースが必要な本当の理由)。

これを修正するには、次の2つのことを行う必要があります。

  1. <li>適切なノード内のノードを選択します。XPathをに変更し//ul[@class="dpItemFeaturesList"]/liます。
  2. ループ内で、foreach2つのノーブレークスペース&nbsp;&nbsp;(これはHTMLであるため)を$desc変数に連結します。

これ$cが配列インデックスです。

function get_description($asin){
    $url = 'http://www.amazon.com/gp/aw/d/' . $asin . '?d=f&pd=1';
    $data = request_data($url);
    $desc = '';

    if ($data) {
        $dom = new DOMDocument();
        @$dom->loadHTML($data);
        $xpath = new DOMXPath($dom);
        if (preg_match('#dpItemFeaturesList#',$data)){
            $k = $xpath->query('//ul[@class="dpItemFeaturesList"]/li');
            foreach ($k as $c => $tot) {
                if ($c > 0) {
                    $desc .= "&nbsp;&nbsp;";
                }
                $desc .= $tot->nodeValue;
            }
        }
    }
    return $desc;
}

ループの最後のノードの後に​​余分な$c > 0スペースがないようにチェックします。

PS:元の質問とは関係ありません。リンクを共有したコードには、に未定義の変数が$timestampあり$date = date("format", $timestamp);ますline 116

于 2012-12-31T12:41:36.740 に答える
0

それぞれの間にそれが必要な場合は、最初の反復を除いて、各反復の前に追加する必要があります。

        $k = $xpath->query('//ul[@class="dpItemFeaturesList"]');
        foreach ($k as $c => $tot) {
            $c && $desc .= '  '; # all but first
            $desc .= $tot->nodeValue;
        }

これはあなたを救う表現ですが、if同じように機能します。たぶん少し味がするので、ifそれもできます:

        $k = $xpath->query('//ul[@class="dpItemFeaturesList"]');
        foreach ($k as $c => $tot) {
            if($c) $desc .= '  '; # all but first
            $desc .= $tot->nodeValue;
        }

これは、ゼロ以外のすべての整数がtruePHPにあるために機能します。

デモをご覧ください

于 2012-12-31T12:42:35.567 に答える