【问题标题】:PHP check value in array match conditions then echo out that specific valuesPHP 检查数组匹配条件中的值,然后回显该特定值
【发布时间】:2016-04-11 09:20:42
【问题描述】:

我正在尝试显示 XML 列表中与帖子标题匹配的电影信息。

$movie_title是电影名的变量。

现在我有两个问题:

  • 如果标题不匹配,则 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!';
    }
}

【问题讨论】:

  • 代替foreach试试in_array()
  • if(in_array($movie_title ,$movies)){//success code }else{ echo "No Match";}
  • @Manjeet Barnala 你能举个例子吗?我遇到了错误。

标签: php arrays xml match sentence


【解决方案1】:

这将起作用,通过在您实际找到匹配的电影标题时设置 $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!';
}

【讨论】:

  • 太好了,它正在工作!感谢您抽出宝贵时间@RiggsFolly
  • 我很高兴老伙计
【解决方案2】:

您可以按照 cmets 中的建议使用 in_array(),或者稍微更改您的代码,以便取消循环,当您找到匹配项时,或者当循环完成但没有找到匹配项时,您会显示“不匹配”

小心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!";

【讨论】:

  • 谢谢@chillichief 我真的很喜欢你的想法!
【解决方案3】:

用下面的代码替换你的代码

<?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!';
}
?>  

【讨论】:

  • 没有找到任何东西
  • 这不起作用,你能解决这个问题吗?很高兴看到 in_array 是如何工作的。
  • 对不起,没有错误,但它总是回显“不匹配!” @Manjeet Barnala
猜你喜欢
  • 2011-09-23
  • 1970-01-01
  • 1970-01-01
  • 2015-01-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多