0

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

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

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

)

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

4

2 回答 2

5

你要:

$data[1]['question']

不是:

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

编辑:

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

相关文档可以在这里找到:

键可以是整数或字符串。该值可以是任何类型。

此外,还会发生以下关键转换:

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

您的阵列从哪里提供?数组索引可能具有不可见的(通过您的编辑器、浏览器等)字符,如退格或空 (\0) 字符。您在 var_dump 上看不到这些字符。

看这个例子:代码:

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

于 2013-04-08T19:39:40.590 回答