PHP:从数组中获取时间戳数据

时间:2011-04-19 09:02:19

标签: php arrays object

这里的一名php学生已经被困了好几个小时了:(

这是我的问题,这个:

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

打印:

    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
                    )


            )
.
.
.

createdAt是创建地点的日期的时间戳。 我需要在时间戳之间创建的地方的地点ID。

这是我在时间戳逻辑之间的方法:

$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中需要的信息是在这些时间戳之间创建的地点ID。

我该怎么做?

非常感谢!

3 个答案:

答案 0 :(得分:2)

在这里试图变得聪明......; - )

$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 :(得分:1)

对于PHP&gt; = 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中较新的闭包代替旧式匿名函数。

答案 2 :(得分:0)

如果我正确理解了这个问题,我想你想这样做。

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

}

也只是让你知道你能做到:

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

在调试时保存自己的一些击键。