【问题标题】:Foreach strpos problem. Find string in another stringForeach strpos问题。在另一个字符串中查找字符串
【发布时间】:2011-09-26 12:36:48
【问题描述】:

我正在尝试让这个脚本工作。

这个想法是,如果输入字符串 ($query) 不以 '/t' 开头并且包含 $trigger 单词之一,则设置 $error

我无法让它工作,我不知道为什么。

<?php

    $error = false;

    $triggers = array('sell', 'buy', 'trade', 'trading');

    $query = 'buying stuff';

    if (!empty($query)) {

        if (substr($query, 0, 2) != '/t') {

            foreach ($triggers as $trigger) {

                if (strpos($query, $trigger)) {

                    $error = true;
                }
            }
        }
    }

    if ($error) {

        echo "fail";
    }
    else {

        echo "pass";
    }

?>

这应该触发了错误,但似乎没有。我做错了什么?

【问题讨论】:

    标签: php arrays foreach substr strpos


    【解决方案1】:

    问题来了:

      if (strpos($query, $trigger)) {
    

    如果在索引 0 处找到字符串,则计算结果为 0,这会导致 IF 语句为假 所以使用

    (strpos($query,$trigger) !== false )

    【讨论】:

      【解决方案2】:

      改成

      if (strpos($query, $trigger) !==false ) {
      

      查看strpos 的工作原理

      【讨论】:

      • 双引号有什么用?它不是制表符
      • 双引号或单引号没有区别。
      • 抱歉各位没有看到斜线的本质
      【解决方案3】:
      <?php
      
          $error = false;
      
          $triggers = array('sell', 'buy', 'trade', 'trading');
      
          $query = 'buying stuff';
      
          if (!empty($query)) {
      
              if (substr($query, 0, 2) != '/t') {
      
                  foreach ($triggers as $trigger) {
      
                      if (strpos($query, $trigger) !== false) {
      
                          $error = true;
                          break;
                      }
                  }
              }
          }
      
          if ($error) {
      
              echo "fail";
          }
          else {
      
              echo "pass";
          }
      
      ?>
      

      请使用“break”关键字,并进行适当的检查。

      希望对你有帮助。

      【讨论】:

        【解决方案4】:

        如果函数strpos 未能找到它返回的字符串false。另请注意,如果在开头找到搜索字符串,则返回 0

        改变

        if (strpos($query, $trigger)) {
        

        if (strpos($query, $trigger) !== false) {
        

        【讨论】:

        • @imoda 我还会在$error = true; 之后添加break 以保护一些不需要的迭代。
        猜你喜欢
        • 2022-06-17
        • 1970-01-01
        • 2021-01-22
        • 2014-01-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-11-19
        • 1970-01-01
        相关资源
        最近更新 更多