【问题标题】:PHP comparison of multiple strings failing多个字符串的PHP比较失败
【发布时间】:2012-04-19 04:13:35
【问题描述】:

您好,我正在使用 wordpress 创建一个电影博客。我使用带有自定义文本框的序列化数据创建了电视剧集。我的问题是,当我对数据进行反序列化时,我希望它显示季节、集数和情节。然而,由于多集将有相同的季节,我不希望重复的季节编号显示多次。我使用 if 语句来完成这项工作;但是有时我会得到重复的季节,就好像它是完全相同的两个不同的数字一样。为了确保空格或任何东西不是人为错误,我使用带有数字的列表框输入季节编号。不幸的是我仍然有这个问题。

foreach ($data as $item):
 if ($item['season']  !== $old_season) {
       echo  '<ul class="panel"><h2 class="title">Season '. $item['season'].'</h2>'.     
             '<li><h2>'.stripslashes(base64_decode($item['title'])).'</h2>'; $old_season = $item['season'];} 
           echo         '<p>Episode'. $item['number']. 'Aired'.stripslashes(base64_decode($item['airdate'])).'</p>'
                   .'<p>'.stripslashes(base64_decode($item['plot'])).'</p></li>'; 
 endforeach

任何帮助将不胜感激!

【问题讨论】:

  • 发送var_dump($data) 并在此处发布结果。
  • @Craig 我想唯一剩下的就是在循环的每次迭代中使用 var_dump 并检查这些值到底是什么。其实$data进来的顺序是什么?鉴于您的 var_dump,第 18 季的标题将被打印两次,因为第 2 季位于第 18 季所有剧集的中间。
  • @RJHill 你是对的!看来排序是问题所在。它是按集数而不是季数排序的。仍然对重复的季节如何能够通过我的 if 语句感到困惑。
  • @Craig,因为按照您的设置方式,它只有在所有季节都井井有条的情况下才能工作。它在结尾将 $old_season 设置为当前季节,因此如果我们只查看该变量,您会看到一堆不会重复的第 18 季,但随后出现 2 并且 $old_season 设置为 2,因此,当下一个第 18 季到来时,它与第 2 季不匹配并再次弹出......
  • @Craig 这是因为$old_season 在 if 语句中不断被覆盖,抹去了之前打印过第 18 季的事实。

标签: php wordpress serialization comparison


【解决方案1】:

在这种情况下,您所要做的就是对 $data 数组进行排序,您所拥有的代码就可以正常工作。

if ($item['season']  !== $old_season) {
       echo  '<ul class="panel"><h2 class="title">Season '. $item['season'].'</h2>'.     
             '<li><h2>'.stripslashes(base64_decode($item['title'])).'</h2>';
       $old_season = $item['season'];
}

问题在于这里的代码:

$old_season = $item['season'];

因为它只适用于顺序元素。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-05
    • 2023-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多