2017-09-06 11 views
1

のために存在する場合、私は$のトップと呼ばれるこの配列を持っている見つけるためにPHPを使用して、それはとてもような車種で構成さ -配列の値がループ

$top = array('tacoma', 'corolla', 'camry'); 

を私は、これらの値のいずれかが存在するかどうかを知りたいです$ titleと呼ばれるforループのvarに、これを使ってrssフィードを取得します。ここで

$feed = array(); 
foreach ($rss->getElementsByTagName('item') as $node) { 
    $c++; 
    $item = array ( 
     'title' => $node->getElementsByTagName('title')->item(0)->nodeValue, 
     'desc' => $node->getElementsByTagName('description')->item(0)->nodeValue, 
     'link' => $node->getElementsByTagName('link')->item(0)->nodeValue, 
     'date' => $node->getElementsByTagName('date')->item(0)->nodeValue, 
     ); 
    array_push($feed, $item); 

} 


for($x=0;$x<$limit;$x++) { 
    $title = $feed[$x]['title']; 
    $link = $feed[$x]['link']; 
    $description = $feed[$x]['desc']; 
    $item = $feed[$x]['item']; 
    $date = date('l F d, Y', strtotime($feed[$x]['date'])); 
    $desc = preg_replace('/[^A-Za-z0-9\-]/', ' ', $description); 
    $title = strtolower($title); 

    $find= array_search($top, $title); 

    if ($find) { 
     // insert all matches in database 
    } else { 
     echo 'nothing found'; 
    } 

} 

は$タイトルが生成するものの一例である - - トヨタカローラCEの低マイル(チコ)$ 4500私はそうのような運でarray_search使用して試してみました。私は配列$ topを使ってタイトルにCorollaが存在するかどうか確認したいと思います。

2012シボレーカマロの45周年記念版(チコ/オーランド)販売$ 115002006 Mitsubishi Raiderで硬膜クロスピックアップ(湯葉市、約)$ 59002016かわす - ここ

は、私は$タイトルエコーとき私が得るものですram 2500(corning)$ 430002016 dodge ram 2500(corning)$ 4300020062007 toyota corolla ce低速(chico)$ 4500 etc ... $ top配列の文字列の1つを含むすべてのタイトルを取得します。

+0

あなたはfor'ループ '内else'場合-'これをaplliedしたのですか?私は見ることができません。 '$ top = array(tacoma、corolla、camry);'は無効です。 '$ top = array( 'tacoma'、 'corolla'、 'camry');'である必要があります。また、 '$ feed'は何か分かりません。あなたはその価値を示すことができますか? –

+0

それについて申し訳ありません、私はmore info ...で更新しましたif-elseはforループ内にあります。 –

+0

'はいif elseはforループ内にありますか? 'どこ?それを正しく追加してください。別の論理としてではありません。 –

答えて

1

: -

<?php 
$feed = [];//create an empty array variable 
$top = array('tacoma', 'corolla', 'camry'); // predefine array 
foreach ($rss->getElementsByTagName('item') as $node) { 
    //$c++; not needed because no where used 
    $feed[] = [ 
     'title' => $node->getElementsByTagName('title')->item(0)->nodeValue, 
     'desc' => $node->getElementsByTagName('description')->item(0)->nodeValue, 
     'link' => $node->getElementsByTagName('link')->item(0)->nodeValue, 
     'date' => $node->getElementsByTagName('date')->item(0)->nodeValue, 
     ]; // assign value directly 
} 

foreach($feed as $fee){ //use foreach it will take care of indexes 
    $title = $fee['title']; 
    $link = $fee['link']; 
    $description = $fee['desc']; 
    $item = $fee['item']; 
    $date = date('l F d, Y', strtotime($fee['date'])); 
    $desc = preg_replace('/[^A-Za-z0-9\-]/', ' ', $description); 
    $title = strtolower($title); 

    $find= array_search($top, $title); 

    if (count(array_intersect($top, explode(" ",$title)))>0) { 
     echo $title. " matched"; 
    } else { 
     echo 'nothing found'; 
    } 

} 
+0

ありがとう、私は "何も見つかりませんでした"約20回ループが発生したが、一致なし –

+0

@ RyanDは私に別の値を表示する'$ title'.'echo'それを取得して何を得るかを教えてください –

+0

私は質問に追加しました –

0

あなたがarray_intersectcountを使用することができます。

if (count(array_intersect($top, $title)) > 0) { 
    // do something 
} else { 
    echo 'nothing found'; 
} 

説明: 2つの配列の交点が1つ以上の値を残し、それがそうでなければ、それはありませんが、存在しています。


注:あなたは上の書き込み$titleためのループ内のすべての時間であることを確認してください。 forの外にifを使用すると、最後の値だけが保持されます。あなたは以下のように(コメントに与えられた変更を)ツアーコードを変更する必要が

+0

ありがとうございます。何も見つからない場合にのみ値を生成します。 –

+0

私はあなたがいないと思う:https://eval.in/856505 – Thamilan

関連する問題