Php 数组偏移量通过 'isset' ,即使它没有设置

标签 php

对我来说,解释这一点的最简单方法是举一个例子……下面是问题代码的复制:

<?php
    $test=array();
    $test['one']='hello';
    if(isset($test['one']['two'][0])) {
        echo 'Apparently it is set ...';
        echo $test['one']['two'][0];
   }
?>

返回为:

Apparently it is set ...

Warning: Illegal string offset 'two' in C:\test.php on line 6

h

这是因为有混合键类型吗?这只是我遇到的一个小异常,想知道是否有人可以阐明它 ...

最佳答案

原因是,当你取消引用一个字符串时,它会返回一个包含单个字符的字符串(假设索引不超过长度);生成的字符串可以再次取消引用(从 5.4 开始)。

例如 - link :

$s = 'hello';
$s[0];    // "h"
$s[0][0]; // "h"
// etc. etc.

非法索引,例如 'two'会引起通知,但它被视为索引 0 , 在内部使用时除外 isset() .

另一个例子:

$s[0][1];    // ""
$s[0][1][0]; // notice: uninitialised string offset: 0

如果您事先不知道传递的是字符串还是数组,而这对您很重要,则需要在每个路径之间进行额外的类型检查。

关于Php 数组偏移量通过 'isset' ,即使它没有设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27181732/

相关文章:

php - 注册时防止重复的用户名条目(PHP/MySQL

javascript - 使用 php Onload javascript 不会触发 onload 函数

php - 如何将 UIImage 上传到 PHP Web API

php - 多个数据库、一种学说连接和一个不服从的 bundle

php - 此查询的输出值/类型是什么?

php - 需要一些 PHP 逻辑来遍历一些 mysql 数据库结果

javascript - 通过Ajax请求调用php函数

javascript - 如何通过遍历到父div来获取元素的值

php - 如何从 php 中的 bcrypt 哈希密码中提取盐?

PHP SOAP 将元素发送为 xsi :type ="xsd:boolean"