我有一个需要过滤的数组,例如,我可能只希望将星期几作为星期五的记录。据我所知,这从未奏效,但它正在使用一个对象并在其上使用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]);
答案 0 :(得分: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 :(得分: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;
}
}
答案 2 :(得分:1)
从评论来看,数组是一个laravel集合,我猜答案是:
$filtered = $collection->filter(function ($value, $key) {
return $value['day_id'] == 5;
});