2017-07-25 9 views
0

動的に生成された変数$title$priceを配列$listに追加しようとしています。複数のforeach文からの配列への追加

これはある程度機能します。このコードは、タイトルと価格の値を持つキーを持つ配列を作成します。

価格の値は、キーごとに異なります。しかし、それだけで最初title結果は、私が最初のforeachループのみ第1を実行しているので、それがあると思うコードを見ると次の配列(同一タイトルそれまではキー30)

[0]=> array(2) { ["title"]=> string(57) "Gibson Les Paul ** Nr.1 Gibson dealer ** 18 gitaarwinkels" ["price"]=> string(25) " € 300,00 " } [1]=> array(2) { ["title"]=> string(57) "Gibson Les Paul ** Nr.1 Gibson dealer ** 18 gitaarwinkels" ["price"]=> string(25) " € 100,00 " } 

を作成、追加されたと思われます。

私は、このようなタイトルforeachループ隔離するときので $titleの正しい値は、そこにいることを知っている

foreach ($titlehit as $titles) { 
    $title = $titles->nodeValue; 
    echo "$title"; 
} 

30異なる$title結果を私は得ることができますどのように

$url = "https://url.com"; 

$html = new DOMDocument(); 
@$html->loadHtmlFile($url); 
$xpath = new DOMXPath($html); 

$titlehit = $xpath->query("//span[@class='mp-listing-title']"); 
$pricehit = $xpath->query("//span[@class='price-new']"); 

$list = array(); 
$i = 0; 

    foreach ($titlehit as $titles) { 
    foreach ($pricehit as $prices) { 
     if ($i >=5 && $i <=35) { 
     $title = $titles->nodeValue; 
     $price = $prices->nodeValue; 
     $list[] = array(
      'title' => $title, 
      'price' => $price 
     ); 
     } 
     $i++; 
    } 
    } 

を表示しています$listに正しいタイトルと価格の両方の値を保持するには?ご協力いただきありがとうございます。

+0

「$ i」は何のために使用されますか?カウンターとして? – MaxZoom

+0

$ iは、配列に結果5〜35を追加するだけのカウンタとして使用されます。これより前のコードはより多くの結果を返します。 – Peter

+0

@Peter 30タイトルしかない場合、なぜマジックナンバー35を使用していますか?なぜあなたが5位で始まる必要があるかわからない。 – MaxZoom

答えて

0

対応する配列に1対1のタイトルと価格の比がある場合、ループは1つだけ必要です。

$list = array(); 
$i = 0; // initialize 
// Assuming $titlehit AND $pricehit have the same number of elements 
foreach ($titlehit as $titles) { 
    // Assuming $pricehit is a simple array. If it is an associative array, we need to use the corresponding key as the index instead of $i. We'll get to this once you can confirm the input. 
    $prices = $pricehit[$i]; 
    // Not entirely sure why you need this condition. 
    if ($i >=5 && $i <=35) { 
     $title = $titles->nodeValue; 
     $price = $prices->nodeValue; 
     $list[] = array(
      'title' => $title, 
      'price' => $price 
     ); 
    } 
    $i++; 
} 
+1

ありがとう、これは動作します。 $ iはカウンタとして使用され、前のコードの結果5 - > 35のみが配列に追加されるようにします。 – Peter

0

確実に知るためにここにいない正確に十分なコードが、あなたはあなたのforeachループの各反復であなたのイテレータ$iをリセットする必要があるように見えます:各タイトルのために、1つの価格すなわちがあると仮定すると

$list = array();  
    foreach ($titlehit as $titles) { 
    $i = 0; 
    foreach ($pricehit as $prices) { 
     if ($i >=5 && $i <=35) { 
     $title = $titles->nodeValue; 
     $price = $prices->nodeValue; 
     $list[] = array(
      'title' => $title, 
      'price' => $price 
     ); 
     } 
     $i++; 
    } 
    } 
関連する問題