无法访问数组密钥

时间:2013-04-08 19:22:04

标签: php arrays key

我对数组的键有一点问题。 该数组如下所示:

Array
(
    [1] => Array
        (
            ["question"] => test question 1
            ["open_response"] => 1
        )

    [2] => Array
        (
            ["question"] => test question 2
            ["yes_no"] => 1
        )

)

但是出于某种原因,每当我尝试访问$data['1']['question']时,它都会告诉我问题不是索引。我对此有点困惑,因为它应该是关键但不是,我该如何解决这个问题?或者我如何访问它?

2 个答案:

答案 0 :(得分:5)

你想:

$data[1]['question']

$data['1']['question']

编辑:

我的回答并没有解决他的问题,而是帮助他找到了实际的问题。上面的两个片段完全相同,因为如果字符串是有效整数,PHP会将字符串键转换为整数。国际海事组织,它令人困惑如地狱。如果我使用字符串键入我的数组,dag`nammit它应该用字符串键入,即使该字符串也可以解析为int!

可以找到相关文档here

  

密钥可以是整数或字符串。值可以是任何类型。

     

此外还会发生以下关键演员:

     
      
  1. 包含有效整数的字符串将强制转换为整数类型。例如。键“8”实际上将存储在8下。另一方面,“08”将不会被强制转换,因为它不是有效的十进制整数。
  2.   
  3. 浮点数也会转换为整数,这意味着小数部分将被截断。例如。密钥8.7实际上将存储在8下。
  4.   
  5. Bool也会被转换为整数,即键值true实际上将存储在1下,键值为0表示错误。
  6.   
  7. Null将被强制转换为空字符串,即密钥null实际上将存储在“”。
  8. 下   
  9. 数组和对象不能用作键。这样做会导致警告:非法偏移类型。
  10.   

答案 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来重建和验证你的数组。