Я пытаюсь отфильтровать его с помощью array_filter
$time = (time() -10);
$data = json_decode($json, TRUE);
$datafilter = array_filter($data, function($obj)
{
return $obj->response->trade_offers_received->time_created > $time;
});
echo $datafilter;
Я получаю это уведомление: пытаюсь получить свойство не-объекта. Так что я делаю что-то не так. Как я могу отфильтровать этот массив, чтобы получить только объект, где time_created> $ time?
Это мои данные JSON
Array
(
[response] => Array
(
[trade_offers_received] => Array
(
[0] => Array
(
[tradeofferid] => 988832058
[accountid_other] => 212629269
[message] =>
[expiration_time] => 1455467839
[trade_offer_state] => 2
[items_to_give] => Array
(
[0] => Array
(
[appid] => 730
[contextid] => 2
[assetid] => 4974401193
[classid] => 319730196
[instanceid] => 188530139
[amount] => 1
[missing] =>
)
)
[items_to_receive] => Array
(
[0] => Array
(
[appid] => 730
[contextid] => 2
[assetid] => 4981322842
[classid] => 311848115
[instanceid] => 188530139
[amount] => 1
[missing] =>
)
[1] => Array
(
[appid] => 730
[contextid] => 2
[assetid] => 3600963191
[classid] => 350875311
[instanceid] => 480085569
[amount] => 1
[missing] =>
)
)
[is_our_offer] =>
[time_created] => 1454258239
[time_updated] => 1454258249
[from_real_time_trade] =>
[escrow_end_date] => 0
[confirmation_method] => 0
)
[1] => Array
(
[tradeofferid] => 988791916
[accountid_other] => 55306956
[message] => fv 0.1616 nice look
[expiration_time] => 1455466526
[trade_offer_state] => 2
[items_to_give] => Array
(
[0] => Array
(
[appid] => 730
[contextid] => 2
[assetid] => 4974401224
[classid] => 311236182
[instanceid] => 188530139
[amount] => 1
[missing] =>
)
)
[items_to_receive] => Array
(
[0] => Array
(
[appid] => 730
[contextid] => 2
[assetid] => 4985509468
[classid] => 310992880
[instanceid] => 188530139
[amount] => 1
[missing] =>
)
)
[is_our_offer] =>
[time_created] => 1454256926
[time_updated] => 1454256936
[from_real_time_trade] =>
[escrow_end_date] => 0
[confirmation_method] => 0
)
)
)
)
Поскольку я не уверен, что вы получите, если вы сделаете json_decode()
без TRUE
Параметр, который преобразует объекты в массивы, мы будем придерживаться обозначения массива.
Кроме того, если вы заинтересованы только в данных, которые существуют на $data['response']['trade_offers_received']
уровень этой структуры данных, начните свой array_filter
на этом уровне.
Но главным образом, поскольку они являются массивами, используйте обозначение массива, а не обозначение объекта, и, вероятно, все будет работать
Важнее:
Вам также нужно будет изменить код закрытия, чтобы пройти $time
Переменная в закрытие.
$time = (time() -10);
$data = json_decode($json, TRUE);
$datafilter = array_filter($data['response']['trade_offers_received'],
function($arr) use($time)
{
return $arr['time_created'] > $time;
}
);
print_r( $datafilter );
Когда вы используете TRUE
как второй параметр json_decode
, это становится массивом. Если вы хотите получить объект взамен, удалите второй параметр.
$data = json_decode($json); //returns an object
$arr = json_decode($json); //returns an array