gpt4 book ai didi

php - 访问存在的数组元素时 undefined offset

转载 作者:IT王子 更新时间:2023-10-29 01:13:47 34 4
gpt4 key购买 nike

我有一个数组和 PHP,当我打印出来时,我可以看到我需要访问的值,但是当我尝试通过他们的键访问它们时,我得到了一个 PHP 通知。我用 print_r 打印了数组:

Array
(
[207] => sdf
[210] => sdf
)

当我尝试使用索引访问数组时,我收到未定义的偏移通知。这是我的代码:

print_r($output); 
echo $output[207]; // Undefined Offset
echo $output["207"]; // Undefined Offset

$output 数组是调用 array_diff_key 的结果。并且最初通过 HTTP POST 请求作为 JSON 输入。

array_keys给了我以下内容:

Array
(
[0] => 207
[1] => 210
)

回应评论:

var_dump(key($output)); 输出:

   string(3) "207"

var_dump(isset($output[key($output)])); 输出:

   bool(false)

最佳答案

请参阅 PHP Manual 中关于将对象转换为数组的部分:

The keys are the member variable names, with a few notable exceptions: integer properties are unaccessible; private variables have the class name prepended to the variable name; protected variables have a '*' prepended to the variable name.

当从 PHP 中的对象转换为数组时,整数数组键在内部存储为字符串。当您在 PHP 中访问数组元素或正常使用数组时,包含有效整数的键将自动转换为整数。内部存储为字符串的整数是不可访问的键。

注意区别:

$x = (array)json_decode('{"207":"test"}');
var_dump(key($x)); // string(3) "207"

var_dump($x);
// array(1) {
// ["207"]=>
// string(4) "test"
// }


$y['207'] = 'test';
var_dump(key($y)); // int(207)

var_dump($y);
// array(1) {
// [207]=>
// string(4) "test"
// }

print_r在这两个数组上给出相同的输出,但使用 var_dump您可以看到差异。

这里有一些代码可以重现您的确切问题:

$output = (array)json_decode('{"207":"sdf","210":"sdf"}');

print_r($output);
echo $output[207];
echo $output["207"];

简单的解决方法是将 true 传递给 json_decode对于可选的 assoc 参数,指定你想要一个数组而不是一个对象:

$output = json_decode('{"207":"sdf","210":"sdf"}', true);

print_r($output);
echo $output[207];
echo $output["207"];

关于php - 访问存在的数组元素时 undefined offset ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11090328/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com