【问题标题】:in_array() returning false, although I'm sure the needle is in the haystackin_array() 返回 false,尽管我确信针在大海捞针
【发布时间】:2013-06-14 11:07:17
【问题描述】:

in_array 有一个奇怪的问题。出于某种原因,它在我确定应该返回 true 的情况下返回 false。

我认为它这样做的唯一原因是如果有一个隐藏的角色或我看不到的东西。但是我在使用变量时没有添加任何类似的东西。

输出截图:

isValidAnswer方法:

    /**
     * Return whether this is a valid answer or not
     * 
     * @param mixed $answer
     * @return boolean $validAnswer
     */
    public function isValidAnswer($answer) {
        print($answer . "<br />"); print_r($this->answers);
        return in_array($answer, $this->answers);
    }

有什么想法吗?谢谢。

【问题讨论】:

  • var_dump 而不是print_r
  • 您能否提供消息“错误:无效答案”的详细信息。我的意思是代码..
  • 请参考我的回答;这个问题已经解决了。

标签: php arrays


【解决方案1】:

从这里显示的内容来看,您的代码很好。

你对字符的解释是可能的。

您的问题没有显示函数的实际返回值。只有“错误:无效答案”。可能错误是您在哪里获取返回值?

以下代码输出

No<br />Array
(
    [0] => Yes
    [1] => No
    [2] => Maybe
    [3] => 
)
bool(true)

..

<?

class Test {

     private $answers = array('Yes','No','Maybe','');

    /**
     * Return whether this is a valid answer or not
     * 
     * @param mixed $answer
     * @return boolean $validAnswer
     */


    public function isValidAnswer($answer) {
        print($answer . "<br />"); print_r($this->answers);
        return in_array($answer, $this->answers);
    }
}

$test = new Test();
var_dump($test->isValidAnswer('No'));

【讨论】:

    【解决方案2】:

    感谢您的帮助,但我相信我已经解决了自己的问题。

    在该类的构造中,我添加了以下代码:

    $this->answers = unserialize($pollData['answers']); // Unserialise the answers
    
    foreach ($this->answers as $key=>$var) { // Ensure there's no hidden characters or whitespace
            preg_replace('/[\x00-\x1F\x80-\xFF]/', "", $this->answers[$key]);
            $this->answers[$key] = trim($this->answers[$key]);
    }
    

    有一些空白,我相信那里留下了一个回车。因此,从现在开始,构造中的代码应该确保它是“干净”的格式。它现在返回 true。

    我还需要查看并确保它在进入数据库之前已被清理。

    感谢您的帮助。

    【讨论】:

      【解决方案3】:

      问题在您的数组$this-&gt;answers 中。真的很难找到问题所在。所以你可以尝试redefine你的数组。我也尝试过以下两个

      1) $answers = array("Yes","No","Maybe","");
      
      2) $answers=array("Yes","No","Maybe","");
      

      1 不工作,但点 2 工作正常。

      我写了下面的测试

      function isValidAnswer($val) 
      {
          $answers=array("Yes","No","Maybe","");
          //print_r($answers);
          if(in_array($val,$answers))
          {
              echo $val;
          }
      
      }
      
      
      isValidAnswer('No');
      

      【讨论】:

        猜你喜欢
        • 2018-04-18
        • 1970-01-01
        • 2011-02-07
        • 2016-07-30
        • 1970-01-01
        • 2010-11-17
        • 1970-01-01
        • 1970-01-01
        • 2019-05-19
        相关资源
        最近更新 更多