Как получить доступ к массиву объектов в переполнении стека

Я пытаюсь отфильтровать его с помощью 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
)
)
)
)

1

Решение

Поскольку я не уверен, что вы получите, если вы сделаете 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 );
2

Другие решения

Когда вы используете TRUE как второй параметр json_decode, это становится массивом. Если вы хотите получить объект взамен, удалите второй параметр.

    $data = json_decode($json); //returns an object
$arr  = json_decode($json); //returns an array
-1

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector