Не удается получить доступ к записям массива, используя его индекс / ключ в PHP - PullRequest
1 голос
/ 28 апреля 2011

Я делал это тысячу раз раньше, но по какой-то причине я не могу получить доступ к записям массива, используя их индекс / ключ. Единственное, что я делаю иначе, - это чтение json из файла и затем использование json_decode для заполнения этого конкретного массива объектов. Когда я использую цикл foreach, я получаю $ post и $ key, но когда я использую ключ для доступа к тому же значению в исходном массиве, используя $ posts [$ key], он ничего не возвращает. Мне нужно сбросить некоторые конкретные записи, и передача по ссылке тоже не помогла. Ниже приведен код:

    $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]); 
        }
    }  

Ответы [ 2 ]

7 голосов
/ 28 апреля 2011

изменение

$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 голосов
/ 28 апреля 2011

Если я правильно помню, json_decode возвращает не массив по умолчанию, а объект.Вы должны явно запросить, чтобы он возвращал массив вместо этого, если вы хотите foreach () поверх него.

...