2013-04-08 3 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']'을 입력 했습니까?전체 코드를 보여줄 수 있습니까?! –

답변

5

당신이 원하는 :

$data[1]['question'] 

하지 :

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

편집 : 자신의 문제가 해결되지 않는 내 대답은, 오히려 그 실제 문제를 찾아 도움

. 위의 두 조각은 정확히입니다. 왜냐하면 문자열이 유효한 정수이면 PHP가 문자열 키를 정수로 변환하기 때문입니다. IMO, 혼란 스럽군. 배열에 키를 문자열로 대문자로 쓰면, 문자열이 int로 구문 분석 될 수 있다고하더라도 문자열을 키로 지정해야합니다.

관련 문서

here를 찾을 수 있습니다

의 핵심은 정수 또는 문자열이 될 수 있습니다. 값은 모든 유형이 될 수 있습니다.

은 또한 다음과 같은 주요 캐스트가 발생합니다 유효한 정수를 포함

  1. 문자열은 정수 형식으로 캐스팅됩니다. 예 : 키 "8"은 실제로 8 아래에 저장됩니다. 반면에 "08"은 유효 십진 정수가 아니므로 캐스트되지 않습니다.
  2. 플로트도 정수로 변환되므로 소수 부분이 잘 리게됩니다. 예 : 키 8.7은 실제로 8 이하에 저장됩니다.
  3. Bool도 정수에 캐스트됩니다. 즉, true는 실제로 1 아래에 키가 false 아래에 저장됩니다.
  4. Null은 빈 문자열에 캐스팅됩니다. 즉, 키 null는 실제로는 ""에 저장됩니다.
  5. 배열 및 객체를 키로 사용할 수 없습니다. 이렇게하면 경고가 발생합니다 : 잘못된 오프셋 유형입니다.
+0

좋은 관찰 : D. 나는 이런 종류의 오류가 싫다. – PaulP

+0

정말입니까? 나는 그것을 테스트했고'$ data [ '1'] [ 'question']'은'text question 1'을 반환합니다. – Tchoupi

+0

감사합니다 남자, 때로는 우리 코더 여분의 눈이 필요 ... 그런 어리석은 실수, 잘 어젯밤부터 코딩 했어, 내가 좀 쉬어야한다고 생각해, 고마워. :) –

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); 
?> 

출력 : rebuil하고 배열을 검증하기 위해 array_map, array_values ​​:

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" 
} 

당신이 좋아하는 어떤 배열 기능을 사용할 수 있습니다.

관련 문제