当前位置: 首页 > 面试题库 >

不能使用带有数字键作为字符串的PHP数组

夏侯玄天
2023-03-14
问题内容

我有一个将数字键作为字符串类型的PHP数组。

但是当我尝试访问它们时,PHP给了我一个未定义的索引错误。

$a = (array)json_decode('{"1":1,"2":2}');
var_dump($a);
var_dump(isset($a[1]));
var_dump(isset($a["1"]));
var_dump($a[1]);
var_dump($a["1"]);

输出:

数组(大小= 2)
    '1'=>整数1
    '2'=>整数2

布尔值false

布尔值false

错误:E_NOTICE:未定义的偏移量:1

空值

错误:E_NOTICE:未定义的偏移量:1

空值

如何访问这些值?

演示:http://codepad.viper-7.com/8O03IM


问题答案:

因此,我还没有看到其他答案可以解决这个问题,但是@xdazz接近了。

让我们开始我们的环境,它$obj等于已解码字符串的对象表示法:

php > $obj = json_decode('{"1":1,"2":2}');

php > print_r($obj);
stdClass Object
(
    [1] => 1
    [2] => 2
)

php > var_dump( $obj );
object(stdClass)#1 (2) {
  ["1"]=>
  int(1)
  ["2"]=>
  int(2)
}

如果您要访问字符串,我们知道以下操作将失败:

php > echo $obj->1;

Parse error: parse error, expecting `T_STRING' or `T_VARIABLE' or `'{'' or `'$'' in php shell code on line 1

访问对象变量

您可以这样访问它:

php > echo $obj->{1};
1

这跟说的一样:

php > echo $obj->{'1'};
1

访问数组变量

数组的问题是以下代码返回空白,这是类型转换的问题。

php > echo $obj[1];
php >

如果将其回播,则可以再次访问该对象:

php > $obj = (object) $obj;
php > echo $obj->{1};
1

这是一个可以自动完成上述操作的功能:

function array_key($array, $key){
    $obj = (object) $array;
    return $obj->{$key};
}

用法示例:

php > $obj = (array) $obj;
php > echo array_key($obj, 1);
1

php > echo array_key($obj, 2);
2


 类似资料:
  • 问题内容: 是否可以在PHP数组中使用数字字符串作为键,而无需将其转换为整数? 版画 我想要 问题答案: 没有; 不,这不对: 从手册: 键可以是整数或字符串。如果键是整数的标准表示,它将被解释为整数(即​​“ 8”将被解释为8,而“ 08”将被解释为“ 08”)。 附录 由于下面的评论,我认为指出该行为 与 JavaScript对象键 相似 但不 相同 很有趣。

  • 问题内容: 具体来说,我正在尝试使用字符串任意过滤ORM。我已经尝试过exec和eval解决方案,但是我遇到了麻烦。下面的代码不起作用,但这是我知道如何解释我要去的地方的最好方法 问题答案:

  • 我有一个字符串,其中包含以下格式的项目符号•: 我需要回声显示子弹的线。我最接近打印出来的方法是创建然后回显,它可以很好地打印项目符号。 当我尝试对完整的执行同样的操作时,我没有得到任何结果,也没有错误。 以下是我对其结果输出所做的一些尝试: 结果: 当我尝试: 结果:同上。没有变化。 当我尝试: 结果:无输出。 当我尝试: 结果: 我将非常感谢帮助弄清楚如何正确地输出这一点。 多谢了。 编辑 除

  • 问题内容: 我遇到了一个使用ID来命名类型数组的旧应用,例如… 现在,我需要对它们进行重新排序,并且a 会使得在键为整数的情况下似乎不会发生这种情况。 如果我向每个索引添加,将在键周围显示双引号,我想显示它现在是一个字符串… 这使我可以轻松地对它们进行重新排序,而无需触及更多代码。 这是 行不通的 。 A 仍将它们显示为整数数组索引。 有没有一种方法可以将键强制为字符串,这样我就可以在不破坏数组的

  • 我还没有找到一个能解决PHP中整数到字符串转换这一方面的问题,所以 我有一个文件,其中一个字段包含一些长度为3、4或5位的数字,我需要将所有数字标准化为4位 如果数字是123、1234、12345,那么为了标准化,我在第一个数字后面加了一个零,第二个数字不加任何处理,第三个数字四舍五入:到目前为止还不错。问题在于,该文件包含一些具有有效前导零023、0234、02346的数字 我需要保留前导零,我

  • 我们使用SQL Server数据库。当试图使用27GB内存在具有100M条记录的表上运行查询时,Hibernate会将查询(无论是