[英]How to get array items from array object by key value in php
我有下面的对象数组:
$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
但没有运气。
您的实现绝对没有错。 我能想到的唯一其他选择是array_filter
$RESULTS = array_filter($ARR, function($item) {
return $item->day === 'Tue';
});
但是,您的原始方法很有可能比此方法更具性能 ,尤其是在如此小的阵列中。
还要注意,键是由array_filter
保留的,因此最终会得到索引4和5。可以使用array_values
重新索引数组。
$RESULTS = array_values($RESULTS);
有几种方法可以执行此操作,但是:如果您需要多次执行相同的操作,则需要一个函数:
function pluck(array $ARR, $key, $value) {
$RESULTS = [];
foreach ($ARR as $item){
if ($item->$key == $value) {
$RESULTS[] = $item;
}
}
return $RESULTS;
}
您可以将其称为:
$RESULTS = pluck($ARR, 'day', 'Tue');
$RESULTS = pluck($ARR, 'isActive', 1);
// etc...
根据需要多次,而无需所有重复的代码。 也就是说,当然,您可能不需要严格的==
比较,在这种情况下,您可能会选择更灵活的函数。 例如, $value
可能是一个正则表达式,并且您的函数可以进行如下修改:
if (preg_match($value, $item->$key) {
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.