2013-04-08 95 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和驗證您的陣列。