这里的一名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。
我该怎么做?
非常感谢!
答案 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>';
在调试时保存自己的一些击键。