我有一个名为$ 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数组中一个字符串的所有标题。
答案 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_intersect
和count
:
if (count(array_intersect($top, $title)) > 0) {
// do something
} else {
echo 'nothing found';
}
<强>说明:强> 当两个数组的交集留下一个或多个值时,它就会出现,否则就不存在。
注意:确保每次在for循环中都覆盖$title
。如果您在if
之外使用for
,则只保留最后一个值!