PHP: array_filter для объекта?

У меня есть массив, который мне нужно отфильтровать для определенных вещей, например, мне могут понадобиться только записи, в которых день недели указан как пятница. Насколько я знаю, это никогда не работало, но это берет объект и использует array_filter в теме. Может ли это работать? Есть ли лучший способ сделать это с помощью объекта?

public function filterByDow($object)
{
$current_dow=5;
return array_values(array_filter($object, function ($array) use ($current_dow) {
$array = (array) $array;
if(!empty($array['day_id']) && $array['day_id'] > -1){
if($array['day_id'] != $current_dow){
return false;
}
}
return true;
}));
}

$object = $this->filterByDow($object);

Пример данных может быть таким:

$object = (object) array(['id' => '1', 'day_id' => 3], ['id' => '2', 'day_id' => 4]);

1

Решение

Поскольку из комментариев массив является коллекцией laravel, я предполагаю, что ответ:

$filtered = $collection->filter(function ($value, $key) {
return $value['day_id'] == 5;
});

https://laravel.com/docs/5.7/collections#method-filter

1

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

попробуй это

    <?php
$items = array(['id' => '1', 'day_id' => 3], ['id' => '2', 'day_id' => 5]);
function filterByDow($items, $dow = 5){
return array_filter($items, function($item) use ($dow) {
if($item['day_id'] == $dow){
return true;
}
});

}

$resultArr = filterByDow($items);
print_r($resultArr);
?>
1

Попробуйте создать коллекцию и реализовать в ней методы фильтрации.

class Offer
{
private $dayId;

public function getDayId()
{
return $this->dayId;
}

public function setDayId($dayId)
{
return $this->dayId = $dayId;
}
}

class OfferCollection
{
const FRIDAY = 5;

static $dayIds = [
self::FRIDAY => 'Friday'
];

private $offers = [];

public function addOffer(Offer $offer)
{
$this->offers[] = $offer;
}

public function getOffersByDay($dayId)
{
$offers = [];

if (in_array($dayId, self::$dayIds)) {
foreach ($this->offers as $offer) {
if ($offer->getDayId == $dayId) $offers[] = $offer;
}
}

return $offers;
}
}
1
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector