PHP检查数组匹配条件中的值,然后回显该特定值


PHP check value in array match conditions then echo out that specific values

我正在尝试显示与文章标题匹配的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!';
}
?>