如果时间在1小时内,如何使用php中的array_filter函数?

3

我正在尝试找出如何基于比较过滤对象。

我得到了一个看起来像这样的对象,尽管有15个结果...

stdClass Object
(
    [FlightInfoExResult] => stdClass Object
        (
            [next_offset] => 15
            [flights] => Array
                (
                    [0] => stdClass Object
                        (
                            [faFlightID] => SWA2078-1499232401-airline-0885
                            [ident] => SWA2078
                            [aircrafttype] => B738
                            [filed_ete] => 03:00:00
                            [filed_time] => 1499232401
                            [filed_departuretime] => 1499477700
                            [filed_airspeed_kts] => 423
                            [filed_airspeed_mach] => 
                            [filed_altitude] => 0
                            [route] => 
                            [actualdeparturetime] => 0
                            [estimatedarrivaltime] => 1499489100
                            [actualarrivaltime] => 0
                            [diverted] => 
                            [origin] => KPHX
                            [destination] => KMKE
                            [originName] => Phoenix Sky Harbor Intl
                            [originCity] => Phoenix, AZ
                            [destinationName] => General Mitchell Intl

我需要筛选这个对象,只返回[flights],其中[filed_departuretime]在查询结果$time = strtotime($item['departure_time']);的1小时内。

可以像这样进行操作:

abs($object->filed_departuretime - $time) <= 3600)

希望这一切都说得通,感谢您的帮助 :) 我不太懂array_filter是如何工作的,所以目前的代码是这样的...
//set flight identity
$ident = $item['airline'].$item['flight_number'];
$date = date('Y-m-d H:i:s');
$time = strtotime($item['departure_time']);

//get flightaware results
$flightAwareResult = FlightInfoEx($ident);

/*$flightResult = array_filter(
  $flightAwareResult,
);*/

请发布您的PHP代码,以便我们获得更多的上下文信息。 - TBowman
嗯,我其实不太明白array_filter是如何工作的,所以我还没有写过它! - Sandra Willford
迄今为止我所做的是添加了... - Sandra Willford
2个回答

0

Array filter函数接受一个数组,并将每个元素传递给一个函数。它只保留那些函数返回true值的元素。示例:

//set flight identity
$ident = $item['airline'].$item['flight_number'];
$date = date('Y-m-d H:i:s');
$time = strtotime($item['departure_time']);

//get flightaware results
$flightAwareResult = FlightInfoEx($ident);
$filtered_array = array_filter($flightAwareResult->FlightInfoExResult->flights, function ($value) use ($time) { 
      return  $time - $value->filed_departuretime) <= 3600; 
}); 

0

只是试一试

$object='';
$object=json_decode(json_encode($object,true),true);
$result=array_map(function ($array){
    $time = strtotime($array['departure_time']);
    if(($array['filed_departuretime'] - $time) <= 3600){
        return $array;
    }
},$object['FlightInfoExResult']['flights']);
$result=array_filter($result);

$object的位置上放置你的对象变量名。

我认为这会对你有所帮助。


在 $object['FlightInfoExResult']['flights'] 中获取非法的字符串偏移量。 - Sandra Willford
可以展示一下 $object=json_decode(json_encode($object,true),true); 的输出结果吗?另外,$item['departure_time'] 是存在于这个对象中还是其他变量中? - Bibhudatta Sahoo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接