我正在尝试显示与文章标题匹配的XML列表中的电影信息。
$movie_title
是电影名称的变量。
现在我有两个问题:
-
若标题和If语句的条件不匹配,那个么else语句将为每个和If语句条件不匹配的动作回显"不匹配!"。
-
如何仅限制与标题匹配的第一部电影的结果。
我还想知道是否有更好的方法可以做到这一点。
$movie_title = get_the_title();
$movies = simplexml_load_file('http://www.kolosej.si/spored/xml/2.0/');
foreach($movies as $movie) {
$movie_list = $title=$movie->title;
if((strpos($movie_list, $movie_title)) !== false) {
echo $original_title=$movie->original_title . '<br>';
echo $description=$movie->plot_outline;
} else {
echo 'No match!';
}
}
当您实际找到匹配的电影标题时,通过设置$found
,如果$found
未设置,则仅输出No Match
,这将起作用
<?php
$movie_title = get_the_title();
$movies = simplexml_load_file('http://www.kolosej.si/spored/xml/2.0/');
$found = false;
foreach($movies as $movie) {
$movie_list = $title=$movie->title;
if((strpos($movie_list, $movie_title)) !== false) {
echo $original_title=$movie->original_title . '<br>';
echo $description=$movie->plot_outline;
$found = true;
break; // assuming there will only be one, else leave this out
}
}
if ( ! $found ) {
echo 'No match!';
}
您可以按照注释中的建议使用in_array()
,或者稍微修改代码,以便取消循环,当您找到匹配项时,或者当循环结束时没有找到匹配项,则显示"No match"
小心:in_array()
不会像您想要的那样检查子片段,而是只检查整个电影标题。
$movie_title = get_the_title();
$movies = simplexml_load_file('http://www.kolosej.si/spored/xml/2.0/');
foreach($movies as $movie) {
$movie_list = $title=$movie->title;
if((strpos($movie_list, $movie_title)) !== false) {
echo $original_title=$movie->original_title . '<br>';
echo $description=$movie->plot_outline;
$found = true;
break;
}
}
if(!$found)
echo "Not found!";
用以下代码替换您的代码
<?php
$movie_title = get_the_title();
$movies = simplexml_load_file('http://www.kolosej.si/spored/xml/2.0/');
$array_m = (array) $movies ;
if(in_array($movie_title,array_column($array_m,'title')))
{
echo $original_title=$movie->original_title . '<br>';
echo $description=$movie->plot_outline;
}
else
{
echo 'No match!';
}
?>