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、配列を試すことができます。私もこれを2つ以下で試しました

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 に答える