php变量,字符串和数组:associative数组返回字符串的第一个字母

时间:2014-12-05 16:45:04

标签: php arrays associative-array

据我所知,通过将变量分配给变量,可以使用变量作为索引数组来表示单个字符,但为什么下面的代码使用关联数组,而不仅仅是缺少必需的?为什么'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']; 
} 

6 个答案:

答案 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以显示所有错误

这应该会给你一个警告,告诉你正在使用非法偏移。因此,PHP会自动假设您正在寻找数组或字母中的第一个元素。

答案 5 :(得分:0)

它按预期工作...它返回false ...但是当我强制它返回true时... itz抛出一个错误说非法偏移somekind ....但仍然输出第一个字符串....作为anystring转换为int等于0 ..检查你正在使用的php的版本...我使用notepad ++来创建php文件...没有特别的想法......