PHP:如何为对象使用array_filter?

4

我有一个数组,需要筛选特定的内容,例如,我可能只想要星期五这一天的记录。据我所知,这从未成功过,但它正在使用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]);

你能提供一份样本数据吗?这样我就可以在 Fiddler 中模拟它了。 - Borhan
当然。我已经编辑了问题。谢谢。 - sdexp
1
给定的代码到底有什么问题?为什么需要将内部数组转换为对象进行强制转换? - Nico Haase
我必须将变量 $array 转换为数组,因为它最初是一个对象。对于混淆的变量名称,我感到抱歉。 - sdexp
1
https://laravel.com/docs/5.7/collections#method-filter 这个链接是关于 Laravel 框架中集合(Collections)的 filter 方法的文档。 - Blackbam
显示剩余4条评论
3个回答

4

这正是我正在寻找的。谢谢。 - sdexp

3

试一下

    <?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);
?>

一个对象被传递给filterByDow,因此我不知道代码中的这个更改是否被允许? - Blackbam
这正是我一直在寻找的。然而,我已经提交了一个带有非常小的改进的编辑。 - Peter Mghendi

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;
    }
}

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