1

私は次のPHPを持っています:

 <?php

 $array = array("1","2","3");
 $only_integers === array_filter($array,'is_numeric'); // true

 if($only_integers == TRUE)
 {
 echo 'right';
 }

 ?>

何らかの理由で、常に何も返されません。何が間違っているのかわかりません。

ありがとう

4

6 に答える 6

2

is_int変数の実際のタイプをチェックします。これはstringあなたの場合です。is_numeric変数の種類に関係なく数値に使用します。

次の値はすべて「数値」と見なされることに注意してください。

"1"
1 
1.5
"1.5"
"0xf"
"1e4"

つまり、floatまたは整数の有効な表現となるfloat、整数、または文字列。

編集:また、あなたは誤解しているかもしれarray_filterません、それはtrueまたはfalseを返しませんが、コールバック関数がtrueを返したすべての値を持つ新しい配列を返します。if($only_integers)それでも、空でない配列はすべて「真っぽい」と見なされるため、(代入演算子を修正した後)機能します。

編集2: @SDCが指摘したctype_digitように、10進形式の整数のみを許可する場合に使用する必要があります。

于 2013-02-15T15:36:07.527 に答える
2

元の配列の長さとフィルター処理された配列の長さを比較する必要があります。array_filter 関数は、true に設定されたフィルターに一致する値を持つ配列を返します。

http://php.net/array_filter

 if(count($only_integers) == count($array))  {
     echo 'right';
 } else {
     echo 'wrong';
 }
于 2013-02-15T15:43:54.133 に答える
1
  1. is_int()文字列なのでfalseforが返されます。代わりに使用するために質問を編集したようです。これは、おそらく望ましくない 16 進値と指数値を返すため、おそらく悪い考えです (たとえば、 true を返します)。代わりに使用することをお勧めします。"1"
    is_numeric()trueis_numeric("dead")
    ctype_digit()

  2. ここではトリプルイコールが誤用されています。割り当てではなく比較に使用されるため、$only_integers設定されることはありません。を設定するには single-equal を使用します$only_integers

  3. array_filter()true/false値を返しません。フィルター処理された値が削除された配列を返します。これは、$only_integerstrue である後続のチェックが機能しないことを意味します。

  4. $only_integers == TRUE. これは問題ありませんが、おそらくここでトリプルイコールを使用する必要がありました。$only_integersしかしもちろん、それがtrueorではなく、配列になることはすでにわかっているfalseので、実際に要素が含まれているかどうかを確認する必要があります。count()ここでトリックを行います。

これらすべてを考慮して、コードは次のようになります...

 $array = array("1","2","3");
 $only_integers = array_filter($array,'ctype_digit'); // true

 if(count($only_integers) > 0)
 {
     echo 'right';
 }
于 2013-02-15T15:52:01.640 に答える
0

変数を初期化するためではなく、比較するために使用さ===れる変更=

<?php

 $array = array(1,2,3);
 $only_integers = array_filter($array,'is_int'); // true

 if($only_integers == TRUE)
 {
 echo 'right';
 }

?>
于 2013-02-15T15:40:08.357 に答える
0

投稿する前にコードを実行しようとしますか? 私はこのエラーがあります:

Notice: Undefined variable: only_integers in ~/php/test.php on line 4
Notice: Undefined variable: only_integers in ~/php/test.php on line 6

問題をすぐに修正するように変更===します。=このようなタイプミスを避けるために、phplint やその他のツールの使用方法を学習したほうがよいでしょう。

于 2013-02-15T15:47:51.320 に答える
-1
<?php
$test1 = "1";
if (is_int($test1) == TRUE) {
    echo '$test1 is an integer';
}
$test2 = 1;
if (is_int($test2) == TRUE) {
    echo '$test2 is an integer';
}
?>

このコードを試してみると、コードが機能しない理由がわかります。

于 2013-02-15T15:39:01.583 に答える