2011-04-28 27 views
1

我已经做了一千次之前,但由于某种原因,我不能使用他们的索引/键访问数组条目。我所做的唯一不同的是从文件中读取json,然后使用json_decode来填充这个特定的对象数组。当我使用foreach循环时,我得到了$ post和$ key,但是当我用$ posts [$ key]访问原始数组中的相同值时,它不会返回任何内容。我需要取消一些特定的条目,并通过参考传递也没有帮助。下面是代码:无法使用PHP中的索引/键访问数组条目使用其中的索引/键PHP

$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 2011-04-28 08:04:23

+0

用'print_r($ posts)'检查结构并尝试'json_decode($ contents,true)'。 – 2011-04-28 08:04:33

+0

''无形的JSON! – 2011-04-28 08:04:42

回答

7

变化

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

$posts = json_decode($contents, true); - 它会回报你需要数组。

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

也可以改变$now = strtotime('now');$now = time();并将其移出循环 - 它的速度更快:)

TNX @binaryLV的提示:)

+0

也许试图解释他为什么需要改变这种方式 – Ikke 2011-04-28 08:07:36

+0

@Ikke更好? :) – Emmerman 2011-04-28 08:09:21

+0

我会建议使用'time()'而不是'date()'...或者甚至更好 - '$ _SERVER ['REQUEST_TIME']' – binaryLV 2011-04-28 08:10:47

0

如果我记得没错,json_decode没有按默认返回一个数组,但是是一个对象。如果你想对它进行foreach(),你必须明确地要求它返回一个数组。

+0

谢谢。这确实是问题。 – 2011-04-28 08:13:36