据我所知,通过将变量分配给变量,可以使用变量作为索引数组来表示单个字符,但为什么下面的代码使用关联数组,而不仅仅是缺少必需的?为什么'isset'不会在一个肯定不存在的数组键上抛出FALSE?
unset($a);
$a = 'TESTSTRING';
if(!isset($a['anystring'])){
die('MISSING REQUIRED');
}else{
var_dump($a['anystring']);
}
以上示例将输出:
string(1) "T"
修改
如Jelle Keizer所示,这可能是更安全的事情:
if(!array_key_exists('required',$_POST)){
die('MISSING REQUIRED');
}else{
echo $_POST['required'];
}
答案 0 :(得分:2)
PHP正在使用您的字符串作为数字索引。在这种情况下,'anystring'
相当于0
。您可以通过
<?php
echo (int)'anystring';
// 0
var_dump('anystring' == 0);
// bool(true)
PHP做了很多type juggling,这可能导致&#34;有趣&#34;结果
答案 1 :(得分:1)
$ a是一个不是关联数组的字符串。
如果你想以这种方式访问它,你必须做这样的事情。
$a['anystring'] = 'TESTSTRING';
答案 2 :(得分:1)
您需要使用array_key_exists()来测试密钥是否存在
答案 3 :(得分:1)
isset
的工作在您的情况下是正确的。
因为$a
是一个字符串,所以index-operator将在声明的位置给出字符串中指定的char。 (如“Char-Array”)
一个小例子:
$a = 'TESTSTRING';
echo $a[0]; // Output: T
echo $a[1]; // Output: E
// ...
这将输出字符串的索引0和1处的第一个和第二个字符。
因为索引操作符总是要求字符串上的整数值。给定值将自动转换为整数。将字符串转换为整数时,可以看到这一点,如下所示:
echo (int) 'TESTSTRING'; // Output: 0
对于字符串的char访问,还有see the PHP-Manual。
答案 4 :(得分:0)
尝试使用error_reporting(E_ALL);
这应该会给你一个警告,告诉你正在使用非法偏移。因此,PHP会自动假设您正在寻找数组或字母中的第一个元素。
答案 5 :(得分:0)
它按预期工作...它返回false ...但是当我强制它返回true时... itz抛出一个错误说非法偏移somekind ....但仍然输出第一个字符串....作为anystring转换为int等于0 ..检查你正在使用的php的版本...我使用notepad ++来创建php文件...没有特别的想法......