Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php变量、字符串和数组:关联数组返回字符串的第一个字母_Php_Arrays_Associative Array - Fatal编程技术网

php变量、字符串和数组:关联数组返回字符串的第一个字母

php变量、字符串和数组:关联数组返回字符串的第一个字母,php,arrays,associative-array,Php,Arrays,Associative Array,我知道,如果给变量分配了一个sting,那么可以通过将变量用作索引数组来表示单个字符,但是为什么下面的代码使用关联数组,而不仅仅是因为缺少必需的字符而消失呢?为什么“isset”不会对一个绝对不存在的数组键抛出FALSE unset($a); $a = 'TESTSTRING'; if(!isset($a['anystring'])){ die('MISSING REQUIRED'); }else{ var_dump($a['anystring']); } 上述

我知道,如果给变量分配了一个sting,那么可以通过将变量用作索引数组来表示单个字符,但是为什么下面的代码使用关联数组,而不仅仅是因为缺少必需的字符而消失呢?为什么“isset”不会对一个绝对不存在的数组键抛出FALSE

unset($a); 

$a = 'TESTSTRING'; 

if(!isset($a['anystring'])){ 
    die('MISSING REQUIRED'); 
}else{ 
    var_dump($a['anystring']);
} 
上述示例将输出:

string(1) "T"
编辑:

正如Jelle Keiser所指出的,这可能是更安全的做法:

if(!array_key_exists('required',$_POST)){ 
    die('MISSING REQUIRED'); 
}else{ 
    echo $_POST['required']; 
} 

$a是字符串而不是关联数组

如果你想通过这种方式访问它,你必须这样做

$a['anystring'] = 'TESTSTRING';

尝试使用
error\u reporting(E\u all)使PHP显示所有错误


这会给您一个警告,说明您正在使用非法偏移量。因此,在本例中,PHP自动假定您正在查找数组或字母中的第一个元素。

您需要使用array_key_exists()来测试键是否存在。

PHP正在使用字符串作为数字索引。在这种情况下,
'anystring'
相当于
0
。您可以通过执行以下操作来测试这一点

<?php
echo (int)'anystring';
// 0
var_dump('anystring' == 0);
// bool(true)

在您的情况下,
isset
的工作是正确的。 因为
$a
是一个字符串,索引运算符将在声明的位置为您提供字符串中指定的字符。(类似于“字符数组”)

一个小例子:

$a = 'TESTSTRING'; 
echo $a[0]; // Output: T
echo $a[1]; // Output: E
// ...
这将在字符串的索引0和1处输出第一个和第二个字符

因为索引操作符总是希望字符串上有一个整数值。给定值将自动转换为整数。当您将字符串强制转换为整数时,可以看到如下所示:

echo (int) 'TESTSTRING'; // Output: 0

对于字符串上的字符访问也是如此。

它的工作原理与预期的一样。。。结果是假的。。。但当我强迫它回到真的时候。。。itz抛出了一个错误,称为某种非法偏移。。。。但是仍然输出第一个字符串。。。。作为任意字符串,强制转换为int等于0。。检查您正在使用的php版本bro。。。我使用notepad++创建了php文件。。。没有特殊的ide…

我不是在尝试访问它。我知道那是怎么回事。我想这更像是一个抽象的问题。我将$a设置为字符串,并错误地期望isset($a['anysting'])为FALSE,因为我从未设置它。但它又回到了现实。我只是不明白那种机制。啊哈。这就是我要找的。谢谢。有趣的是,只有在4.3.0-4.4.9和5.0.3-5.3.29中,如果我复制并粘贴到Netbeans中,我会得到一个非法的偏移量错误。这主要是因为当使用
$a
作为数组时,只能使用整数键。你是在一个完全空白的文件中写的吗?是的,它只是一个空的php文件。有趣的是,netbeans做了一些额外的检查。我在另一个编辑器中再次尝试了这一点。代码中似乎没有错误。我现在得到了预期的结果。这确实很奇怪:这是一个很好的观点。我以后会这样做的。在处理关联数组时,“isset”似乎并不总是给出预期的结果。谢谢