使用php查找for循环中是否存在数组值

时间:2017-09-06 17:10:13

标签: php arrays for-loop

我有一个名为$ top的数组,它包含像这样的车型 -

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

我想知道是否有任何这些值存在于名为$ title的for循环var中,我使用它来获取rss feed。我尝试过使用array_search但没有运气 -

$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';
    }

}

以下是$ title产生的例子 - toyota corolla ce low miles(chico)$ 4500。我想使用数组$ top来识别标题中是否存在花冠。

这是我在回复$ title时得到的结果 -

2012年雪佛兰camaro 45周年纪念版(chico / orland)$ 115002006三菱raider dura-cross皮卡出售(yuba city,ca。)$ 59002016 dodge ram 2500(corning)$ 430002016 dodge ram 2500(corning)$ 4300020062007 toyota corolla ce低里程(chico)$ 4500等...所以我想要的是拉出包含$ top数组中一个字符串的所有标题。

2 个答案:

答案 0 :(得分: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';
    }

}

答案 1 :(得分:0)

您可以使用array_intersectcount

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

<强>说明: 当两个数组的交集留下一个或多个值时,它就会出现,否则就不存在。

注意:确保每次在for循环中都覆盖$title。如果您在if之外使用for,则只保留最后一个值!