PHPプログラミングでは、特にループ構造( foreachやループなど)を扱う場合、値が整数であるかどうかを判断することが非常に一般的です。 is_int()は、変数が型整数( int )の値であるかどうかを決定する組み込み関数です。関数自体は単純ですが、特に配列キー、フォーム入力、または外部データを扱う場合、ループで使用される場合、見落とされがちな落とし穴が伴うことがよくあります。
この記事では、一般的な誤解や実用的な例を含む整数を判断するために、ループでis_int()を正しく使用する方法について詳しく説明します。
is_int(mixed $value): bool
この関数は、変数をパラメーターとして取得し、変数のタイプが整数(int)である場合にtrueを返し、それ以外の場合はfalseを返します。
例:
$value = 10;
if (is_int($value)) {
echo "それは整数です";
} else {
echo "不それは整数です";
}
出力:
それは整数です
実際のアプリケーションでは、頻繁にアレイを通過するためにEachを使用します。この時点で、アレイのキーで整数判断を下すことができます。典型的なシナリオは、混合配列を処理するか、インデックス配列を連想配列と区別することです。
$data = [
0 => 'りんご',
1 => 'バナナ',
'a' => 'オレンジ',
'2' => '梨'
];
foreach ($data as $key => $value) {
if (is_int($key)) {
echo "$key それは整数です索引:$value\n";
} else {
echo "$key はい、非整数インデックス:$value\n";
}
}
出力:
0 それは整数です索引:りんご
1 それは整数です索引:バナナ
a はい、非整数インデックス:オレンジ
2 はい、非整数インデックス:梨
注:キー「2」は整数のように見えますが、文字列型であり、 is_int()によって整数として判断されません。これは、is_int()を使用する場合の重要なポイントです。
文字列形式の数値( '2'など)も整数としてカウントされることを判断したい場合は、 ctype_digit()またはis_numeric() with intval()を使用する必要があります。
$key = '2';
if (is_numeric($key) && (string)(int)$key === (string)$key) {
echo "$key 整数と見なすことができます";
}
ただし、変数が厳密な整数値であるかどうかを判断したい場合、 IS_INT()が最も適切で安全な選択です。
forループ自体はしばしば整数インデックスに依存していますが、ループの動作を決定するために外部に通過したデータで判断を下す必要がある場合があります。
$limit = $_GET['limit'] ?? 10;
if (!is_int($limit)) {
$limit = (int)$limit; // ケース
}
for ($i = 0; $i < $limit; $i++) {
echo "第 $i 2番目のループ\n";
}
フォームまたはURLパラメーターに$制限を渡す場合、デフォルトは文字列タイプです。 IS_INT()を直接使用すると判断できないため、判断前にタイプ変換を実行するか、 filter_var()で使用する必要があります。
$limit = $_GET['limit'] ?? 10;
if (filter_var($limit, FILTER_VALIDATE_INT) !== false) {
$limit = (int)$limit;
} else {
$limit = 10;
}
この方法は、ユーザー入力の検証に安全であり、より適しています。
たとえば、訪問:
https://gitbox.net/index.php?limit=5
ループは5回実行されます。
is_int()は、 type intの値と'5'などの文字列番号のみに対してのみtrueを返します。
配列キーが整数の整数であるかどうかを判断する場合、注意してください。数値文字列は整数キーとして処理されません。
ユーザー入力は通常、文字列タイプであり、 filter_var()または手動変換を使用して、タイプが一貫していることを確認することをお勧めします。
整数のように見える文字列を判断する場合は、 CTYPE_DIGIT()またはその他の代替案を使用することもできます。
ループ構造でis_int()を使用することは、一般的なタイプの安全チェック方法ですが、堅牢なPHPプログラムを作成するには、その制限と使用シナリオを理解する必要があります。