索引空变量时未引发 php 未定义索引通知

标签 php arrays undefined

我很想知道 PHP 中的以下行为是否有意为之。而且,如果有意,通过在其中创建索引从空变量初始化数组被认为是可以接受的(如第一个代码片段中所做的那样)?

error_reporting(E_ALL);
$arr = null;

echo ($arr["blah"]===null) ? "null" : $arr["blah"];

$arr["blah"] = "somevalue";
echo "<br>";
echo ($arr["blah"]===null) ? "null" : $arr["blah"];
var_dump ($arr);

这输出

null
somevalue

array (size=1)
   'blah' => string 'somevalue' (length=9)

但是,如果数组首先被初始化(见下面的代码),我得到完全相同的输出,但是当我第一次尝试 $arr["blah"]

error_reporting(E_ALL);
$arr = array();

echo ($arr["blah"]===null) ? "null" : $arr["blah"];

$arr["blah"] = "somevalue";
echo "<br>";
echo ($arr["blah"]===null) ? "null" : $arr["blah"];
var_dump ($arr);

最佳答案

如果数组为空,PHP 不会尝试比较。

在第二种情况下,确实会发生比较,因为数组已设置。 PHP 不会检查它是否为空。

您的三元组正在尝试访问变量 $arr["blah"],而不是在进行比较之前检查它是否已设置。

正确的写法是:

error_reporting(E_ALL);
$arr = array();

if(isset($arr["blah"])) echo ($arr["blah"]===null) ? "null" : $arr["blah"];

$arr["blah"] = "somevalue";
echo "<br>";
if(isset($arr["blah"])) echo ($arr["blah"]===null) ? "null" : $arr["blah"];
var_dump ($arr);

关于索引空变量时未引发 php 未定义索引通知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20009076/

相关文章:

JavaScript For 循环内的 If 语句

javascript - SharePoint 工作流订阅服务失败

node.js - 在nodejs中运行Neo4j查询返回 "undefined"

javascript - 使用 Javascript 生成的 HTML 表在我的主 div 中产生未定义

php - 在 Laravel5 中使用 Eloquent 模型获取表值

php - Dropbox XAMPP 和 MySQL

php - 我可以为我的函数和类使用 PHP 保留名称吗?

php - Wordpress 中的前端媒体上传

python - 当重复次数少于 n 次时从 numpy 数组中删除行

C - 读取文件并用 strtok 分割成数组