PHP: получение между метками времени данных из массива - PullRequest
1 голос
/ 19 апреля 2011

Студентка, которая застряла здесь на много часов :(

Вот моя проблема, это:

<code>   echo"<pre>";print_r($array1);echo"
";

отпечатков:

    Array
    (
        [0] => stdClass Object
            (
                [id] => 4d6f6aec35993704d52c0d9d
                [createdAt] => 1299147500
                [place] => stdClass Object
                    (
                        [id] => 4adcda40f964a5208a3e21e3
                    )


            )

                [1] => stdClass Object
            (
                [id] => 654jk654n646g54j6kl54j645
                [createdAt] => 1299147500
                [place] => stdClass Object
                    (
                        [id] => 4gh543gh5h5g354h3gg53gh
                    )


            )
.
.
.

сотворен. Это временная метка даты создания места. Мне нужен идентификатор места мест, созданных между временными метками.

Вот мой подход к логике между метками времени:

$array2 = array();

$begin = strtotime("2011-02-17 12:22:49");
$end = strtotime("2011-03-03 10:00:00");

foreach($array1 as $timestamp){
    if($timestamp <= $end && $timestamp >= $begin){
                $array2[] = $timestamp;
    }

}

Это правильно для меня, но, как я уже сказал, необходимая мне информация в $ array2 - это идентификаторы мест, созданные между этими временными метками.

Как я могу это сделать?

Спасибо за тонну!

Ответы [ 3 ]

2 голосов
/ 19 апреля 2011

Просто пытаюсь быть умным здесь;; -)

$begin = strtotime("2011-02-17 12:22:49");
$end = strtotime("2011-03-03 10:00:00");

$array2 = array_filter($array1, create_function('$o', "return \$o->createdAt >= $begin && \$o->createdAt <= $end;"));
$array2 = array_map(create_function('$o', 'return $o->place->id;'), $array2);
1 голос
/ 19 апреля 2011

Это был бы хороший вариант использования для замыканий в PHP> = 5.3:

$begin = strtotime("2011-02-17 12:22:49");
$end   = strtotime("2011-03-03 10:00:00");

$array2 = array_map(function($item) {
    return $item->place->id;
}, array_filter($array1, function($item) use($begin, $end) {
    return $item->createdAt >= $begin && $item->createdAt <= $end;
}));

По сути, это тот же код, который показан как deceze , но вместо старогов стиле анонимных функций мы используем более новые замыкания из PHP 5.3.

0 голосов
/ 19 апреля 2011

Я думаю, что вы хотите сделать это, если я правильно понимаю вопрос.

$array2 = array();

$begin = strtotime("2011-02-17 12:22:49");
$end = strtotime("2011-03-03 10:00:00");

foreach($array1 as $item){
    $timestamp = $item->createdAt;
    if($timestamp <= $end && $timestamp >= $begin){
                $array2[] = $item->place;
    }

}

Также, чтобы вы знали, что можете сделать:

<code>echo '<pre>' . print_r($array2, 1) . '
';

, чтобы сэкономить некоторые нажатия клавиш при отладке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...