私は次のPHPを持っています:
<?php
$array = array("1","2","3");
$only_integers === array_filter($array,'is_numeric'); // true
if($only_integers == TRUE)
{
echo 'right';
}
?>
何らかの理由で、常に何も返されません。何が間違っているのかわかりません。
ありがとう
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進形式の整数のみを許可する場合に使用する必要があります。
元の配列の長さとフィルター処理された配列の長さを比較する必要があります。array_filter 関数は、true に設定されたフィルターに一致する値を持つ配列を返します。
if(count($only_integers) == count($array)) {
echo 'right';
} else {
echo 'wrong';
}
is_int()
文字列なのでfalse
forが返されます。代わりに使用するために質問を編集したようです。これは、おそらく望ましくない 16 進値と指数値を返すため、おそらく悪い考えです (たとえば、 true を返します)。代わりに使用することをお勧めします。"1"
is_numeric()
true
is_numeric("dead")
ctype_digit()
ここではトリプルイコールが誤用されています。割り当てではなく比較に使用されるため、$only_integers
設定されることはありません。を設定するには single-equal を使用します$only_integers
。
array_filter()
true
/false
値を返しません。フィルター処理された値が削除された配列を返します。これは、$only_integers
true である後続のチェックが機能しないことを意味します。
$only_integers == TRUE
. これは問題ありませんが、おそらくここでトリプルイコールを使用する必要がありました。$only_integers
しかしもちろん、それがtrue
orではなく、配列になることはすでにわかっているfalse
ので、実際に要素が含まれているかどうかを確認する必要があります。count()
ここでトリックを行います。
これらすべてを考慮して、コードは次のようになります...
$array = array("1","2","3");
$only_integers = array_filter($array,'ctype_digit'); // true
if(count($only_integers) > 0)
{
echo 'right';
}
変数を初期化するためではなく、比較するために使用さ===
れる変更=
<?php
$array = array(1,2,3);
$only_integers = array_filter($array,'is_int'); // true
if($only_integers == TRUE)
{
echo 'right';
}
?>
投稿する前にコードを実行しようとしますか? 私はこのエラーがあります:
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 やその他のツールの使用方法を学習したほうがよいでしょう。
<?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';
}
?>
このコードを試してみると、コードが機能しない理由がわかります。