【发布时间】:2017-12-29 03:31:42
【问题描述】:
我有一个对象数组如下:
$ARR =[
{"id":55,"timetable_id":1,"day":"Sat","checkin":"07:00:00","checkout":"11:00:00","isActive":1,"created_at":"2017-12-28 19:40:23","updated_at":"2017-12-28 19:40:23"},
{"id":54,"timetable_id":1,"day":"Fri","checkin":"07:00:00","checkout":"11:00:00","isActive":1,"created_at":"2017-12-28 19:40:23","updated_at":"2017-12-28 19:40:23"},
{"id":53,"timetable_id":1,"day":"Thu","checkin":"07:00:00","checkout":"11:00:00","isActive":1,"created_at":"2017-12-28 19:40:23","updated_at":"2017-12-28 19:40:23"},
{"id":52,"timetable_id":1,"day":"Wed","checkin":"07:00:00","checkout":"11:00:00","isActive":1,"created_at":"2017-12-28 19:40:23","updated_at":"2017-12-28 19:40:23"},
{"id":51,"timetable_id":1,"day":"Tue","checkin":"14:00:00","checkout":"17:00:00","isActive":1,"created_at":"2017-12-28 19:40:23","updated_at":"2017-12-28 19:40:23"},
{"id":50,"timetable_id":1,"day":"Tue","checkin":"07:00:00","checkout":"11:00:00","isActive":1,"created_at":"2017-12-28 19:40:23","updated_at":"2017-12-28 19:40:23"},
{"id":49,"timetable_id":1,"day":"Mon","checkin":"14:00:00","checkout":"16:00:00","isActive":1,"created_at":"2017-12-28 19:40:23","updated_at":"2017-12-28 19:40:23"},
{"id":48,"timetable_id":1,"day":"Mon","checkin":"07:00:00","checkout":"11:00:00","isActive":1,"created_at":"2017-12-28 19:40:23","updated_at":"2017-12-28 19:40:23"}
];
我想通过特定的键值获取任何数组项。
例如,我想获取键 day 等于 Tue 的项目,所以我的数组结果将如下所示:
$RESULTS=[
{"id":51,"timetable_id":1,"day":"Tue","checkin":"14:00:00","checkout":"17:00:00","isActive":1,"created_at":"2017-12-28 19:40:23","updated_at":"2017-12-28 19:40:23"},
{"id":50,"timetable_id":1,"day":"Tue","checkin":"07:00:00","checkout":"11:00:00","isActive":1,"created_at":"2017-12-28 19:40:23","updated_at":"2017-12-28 19:40:23"},
];
我尝试过的:
$RESULTS = [];
foreach($ARR as $item){
if($item->day == 'Tue'){
$RESULTS[] = $item;
}
}
从技术上讲,它按预期工作,但它需要编写很多行代码。是否还有其他支持此操作的 PHP 函数?我试过array_slice 和array_search 但没有运气。
【问题讨论】:
-
你称之为“多行代码”?
-
@Phil 如果 OP 必须针对不同的条件一遍又一遍地重复它,那就是很多行代码。
-
@bishop 我的意思是,你可以将它封装成一个函数(我认为 OP 已经知道了)。如果你真的想要,你也可以把它写成一行~
foreach($ARR as $i) if($item->day==='Tue') $RESULTS[]=$item; -
有趣的是,我假设 OP 没有考虑函数:担心行数似乎是 X-Y 问题的 Y:“我必须这样做很多次,我不想重复大量代码:我怎样才能在一行中做到这一点”。