我对数组的键有一点问题。 该数组如下所示:
Array
(
[1] => Array
(
["question"] => test question 1
["open_response"] => 1
)
[2] => Array
(
["question"] => test question 2
["yes_no"] => 1
)
)
但是出于某种原因,每当我尝试访问$data['1']['question']
时,它都会告诉我问题不是索引。我对此有点困惑,因为它应该是关键但不是,我该如何解决这个问题?或者我如何访问它?
答案 0 :(得分:5)
你想:
$data[1]['question']
不
$data['1']['question']
我的回答并没有解决他的问题,而是帮助他找到了实际的问题。上面的两个片段完全相同,因为如果字符串是有效整数,PHP会将字符串键转换为整数。国际海事组织,它令人困惑如地狱。如果我使用字符串键入我的数组,dag`nammit它应该用字符串键入,即使该字符串也可以解析为int!
可以找到相关文档here:
密钥可以是整数或字符串。值可以是任何类型。
此外还会发生以下关键演员:
- 包含有效整数的字符串将强制转换为整数类型。例如。键“8”实际上将存储在8下。另一方面,“08”将不会被强制转换,因为它不是有效的十进制整数。
- 浮点数也会转换为整数,这意味着小数部分将被截断。例如。密钥8.7实际上将存储在8下。
- Bool也会被转换为整数,即键值true实际上将存储在1下,键值为0表示错误。
- Null将被强制转换为空字符串,即密钥null实际上将存储在“”。
下- 数组和对象不能用作键。这样做会导致警告:非法偏移类型。
醇>
答案 1 :(得分:0)
您的阵列在哪里提供? 数组索引可能具有不可见(通过编辑器,浏览器等)字符,如退格键或空(\ 0)字符。你无法在var_dump上看到theese字符。
看这个例子: 代码:
<pre>
<?php
$a = array(
"\0question\0" => "test question 1",
"question\0" => "test question 2",
"\0question" => "test question 3",
"question" => "test question 4"
);
var_dump($a);
?>
输出:
array(4) {
["question"]=>
string(15) "test question 1"
["question"]=>
string(15) "test question 2"
["question"]=>
string(15) "test question 3"
["question"]=>
string(15) "test question 4"
}
你可以使用一些数组函数,例如:array_values,array_map来重建和验证你的数组。