2013-04-08 106 views
0

我有一个数组的关键问题。 数组是这样的:阵列密钥无法加密

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

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

) 

但由于某些原因,每当我试图访问$data['1']['question']它告诉我,问题是不是一个索引。我有点困惑,因为它应该是一个关键,但不是,我该如何解决这个问题?或者我如何访问它?

+0

你确定你准确的定义了这个数组,然后你键入'$ data ['1'] ['question']'?你能显示完整的代码吗?! – 2013-04-08 19:30:08

回答

5

你想:

$data[1]['question'] 

不:

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

编辑:

我的回答没有解决他的问题,而是帮他找到实际的问题。上面的两个片段是正好是,因为如果字符串是有效整数,PHP会将字符串键转换为整数。海事组织,它令人迷惑不解。如果我用字符串键入我的数组,那么即使该字符串也可以被解析为一个int,它应该用一个字符串键入。

相关文件可以发现here

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

此外以下项石膏将发生:

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

良好的观察:D。我讨厌这类错误。 – PaulP 2013-04-08 19:25:47

+0

你确定吗?我测试了它,'$ data ['1'] ['question']''返回了文本问题1'。 – Tchoupi 2013-04-08 19:26:23

+0

谢谢大家,有时我们的编码员需要额外的眼睛......这样一个愚蠢的错误,以及我自昨晚以来一直在编码,我想我需要休息一下,谢谢你:) – 2013-04-08 19:27:04

0

您的阵列从哪里提供? 数组索引可能不可见(通过您的编辑器,浏览器等)字符,如退格或null(\ 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到rebuil和验证您的阵列。