2013-04-08 5 views
0

У меня есть небольшая проблема с ключом массива. массив выглядит следующим образом:Ключ Array не может быть подключен

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'] 

Edit:

Мой ответ не решает его проблему, а она помогла ему найти реальную проблему. Два фрагмента выше: точно то же самое, потому что PHP будет отличать строковые ключи от целых чисел, если строка является допустимым целым числом. ИМО, это сбивает с толку. Если я запишу свой массив со строкой, dag`nammit следует ввести ключ со строкой, даже если эта строка также может быть проанализирована в int!

Соответствующая документация может быть найдена here:

Ключ может быть либо целым числом или строкой. Значение может быть любого типа.

Дополнительно следующие основные забросы будут происходить:

  1. Строки, содержащие действительные целые числа, будут приведены к целому типу. Например. ключ «8» будет фактически сохранен под 8. С другой стороны, «08» не будет выбрано, так как оно не является допустимым десятичным целым.
  2. Поплавки также отлиты целыми числами, что означает, что дробная часть будет усечена. Например. ключ 8.7 будет фактически сохранен под 8.
  3. Bools также отлиты от целых чисел, т. е. ключ true будет фактически сохранен под 1 и ключ false под 0.
  4. Null будет передан в пустую строку, т.е. нулевой ключ будет фактически сохранен под «».
  5. Массивы и объекты не могут использоваться в качестве ключей. Это приведет к предупреждению: тип недопустимого смещения.
+0

Хорошее наблюдение: D. Я ненавижу подобные ошибки. – PaulP

+0

Вы уверены? Я протестировал его и '$ data ['1'] ['question']' возвращает 'текст вопроса 1'. – Tchoupi

+0

Спасибо мужчине, иногда мы, кодеры, нуждаемся в дополнительном глазе ... такая глупая ошибка, ну, я кодирую с прошлой ночи, мне кажется, мне нужен отдых, спасибо человеку :) –

0

Откуда вы подаете массив? Индексы массивов могут иметь невидимый (ваш редактор, браузер и т. Д.) Символы, такие как backspace или 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 и подтвердить свой массив.

Смежные вопросы