长度超过整型时,键名混乱
PHP 配列の数値キー名に関連する問題
PHP 配列の数値キー名に関する問題
次に、PHP 配列の数値キー名の概要を示します。
キー名の長さは、int の長さの範囲内にのみ指定できます。 int 範囲の場合、上書きやその他の混乱する状況が発生します
キー名の長さが int で、その範囲内の値にアクセスすると、PHP は数値キー名を強制的に int 数値型に変換します
数値キー名の長さが 19 桁を超える場合は 0 になります
キー名が通常の長さの場合、文字列または数値型は同じです
$i = 126545165;$arr['126545165'] = 'abc';$arr[126545165] = 'uio';var_dump($arr);echo '<br>';var_dump(isset($arr[$i]));ログイン後にコピー
長さが整数を超える場合、キー名が混乱します
$i = 12312312312312;$arr['1000000000147483649'] = 'abc';$arr[1000000000147483649] = 'uio';var_dump($arr);echo '<br>';var_dump(isset($arr[$i]));ログイン後にコピー
20文字を超えるとキー名が0になります
$i = 123123123123123123123123123123;var_dump($i);echo '<br>';$arr[123123123123123123123123123123] = 'abc';$arr[strval(123123123123123123123123123123)] = 'abc';var_dump($arr);echo '<br>';var_dump(isset($arr[$i]));echo '<br>';var_dump(isset($arr[strval($i)]));echo '<br>';var_dump(array_keys($arr));ログイン後にコピー
キー名として変数に直接アクセスする場合は異なります。結果
$i = 123123123123123;var_dump($i);echo '<br>';$arr[$i] = 'abc';$arr[strval($i)] = 'abc';var_dump($arr);echo '<br>';var_dump(isset($arr[$i]));echo '<br>';var_dump(isset($arr[strval($i)]));echo '<br>';var_dump(array_keys($arr));ログイン後にコピー上記のテストから:
キー名が数値であり、範囲が int 以内の場合、 string や int はアクセスには影響しません
長さが int より大きい場合は、自動的に float に変換され、変換とアクセスによってさまざまな混乱が生じたり、直接 0 になったりするため、文字列型
$i = 123123123123123123123123123123;$j = '123123123123123123123123123123';$arr1[strval($i)] = 'abc';$arr2[$j] = 'abc';var_dump($arr1);echo '<br>';var_dump($arr2);ログイン後にコピー
に一律に変換するのが最善です
したがって、PHP 配列を動的に操作する場合、キー名に数字が含まれるか、長さが int より大きいかがわからない場合は、キー名 strval を操作用の文字列に変換するのが最も安全です
このウェブサイトの声明この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。著者別の最新記事
2024-10-22 09:46:29 2024-10-13 13:53:41 2024-10-12 12:15:51 2024-10-11 22:47:31 2024-10-11 19:36:51 2024-10-11 15:50:41 2024-10-11 15:07:41 2024-10-11 14:21:21 2024-10-11 12:59:11 2024-10-11 12:17:31最新の問題insert ステートメントでは大文字と小文字が区別されますが、条件として使用される場合は大文字と小文字が区別されません。これはバグとみなされますか?から 1970-01-01 08:00:00000