0

我有一个奇怪的问题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);
    }

有任何想法吗?谢谢。

4

3 回答 3

2

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

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

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

以下代码输出

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'));
于 2013-06-14T11:12:49.413 回答
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]);
}

有一些空白,我相信那里留下了一个回车。所以构造中的这段代码应该确保从现在开始它是一个“干净”的格式。现在它恢复了真实。

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

不过感谢您的帮助。

于 2013-06-14T11:15:38.560 回答
1

问题出在您的数组$this->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');
于 2013-06-14T11:41:59.573 回答