2011-04-28 9 views
1

전에 1000 번이나했는데 어떤 이유로 인덱스/키를 사용하여 배열 항목에 액세스 할 수 없습니다. 다른 일을하는 유일한 방법은 파일에서 json을 읽은 다음 json_decode를 사용하여이 특정 객체 배열을 채우는 것입니다. foreach 루프를 사용하면 $ post와 $ key를 얻을 수 있지만 키를 사용하여 $ posts [$ key]를 사용하여 원래 배열의 동일한 값에 액세스하면 아무 것도 반환하지 않습니다. 특정 항목을 설정 해제하고 참조를 통해 전달하면 도움이되지 않습니다. 아래는 코드입니다PHP에서 인덱스/키를 사용하여 배열 항목에 액세스 할 수 없습니다.

$posts = json_decode($contents, true);

$contents = fread($fh, filesize($filepath)); 
    fclose($fh); 
    $posts = (array)json_decode($contents); 

    foreach($posts as $key => &$post){ 
     $post_time = strtotime($post->post_date); 
     $now = strtotime('now'); 
     if(($now - $post_time) > 86400){ 
      unset($posts[$key]); 
     } 
    } 
+0

'print_r ($ posts)'은 무엇을 반환합니까? – Ikke

+0

'print_r ($ posts)'로 구조체를 검사하고'json_decode ($ contents, true)'를 시도하십시오. –

+0

''보이지 않는 JSON! –

답변

7

변화

$posts = (array)json_decode($contents);

- 당신이 필요로하는 배열을 반환합니다.

http://ru2.php.net/manual/en/function.json-decode.php

또한 당신은 $now = time();$now = strtotime('now');을 변경하고주기 밖으로 이동할 수 있습니다 - 그것은 힌트 :

+0

어쩌면 그가 왜 그런 식으로 변경할 필요가 설명하려고 – Ikke

+0

@ 좋아요? :) – Emmerman

+0

'date()'보다는'time()'을 사용하는 것이 좋습니다 ... 아니면 더 좋게 - $ _SERVER [ 'REQUEST_TIME']' – binaryLV

0

만약 내가 기억, json_decode 아무튼 훨씬 빠른 :

TNX @binaryLV입니다 기본적으로 배열을 반환하지 않고 객체를 반환합니다. foreach()를 사용하려면 배열 대신 배열을 반환하도록 명시 적으로 요청해야합니다.

+0

고마워. 그것은 정말로 문제였습니다. –

관련 문제