php - Laravel 5.3,PHP,按字符串过滤数组对象
问题描述
我有这个对象$data
:
{#792 ▼
+"cities": array:346 [▼
0 => {#454 ▼
+"name": "XXX"
+"id": "1"
}
1 => {#452 ▼
+"name": "ABC"
+"id": "2"
}
1 => {#452 ▼
+"name": "ABC"
+"id": "2"
}
2 => {#433 ▼
+"name": "XYZ"
+"id": "3"
}
etc...
和一个字符串(text
数据库中的一个值),如1,3
.
我想用字符串中包含该 id 的对象过滤对象。
我正在考虑从创建一个集合$data
,然后从字符串创建一个数组:
$dataC = collect ($data);
$array = explode(',', $string)
创建一个空集合并迭代 $dataC,并从 $dataC 中获取具有 $array 中任何值的值,将其推送到新的空集合中。但为此,我需要 2 个链式 foreach。有没有办法可以使用第一个字符串中的值更好地过滤对象?然后迭代数组,并为每个
解决方案
首先,您应该分解您的数据库字符串以获取 ID 数组。
之后,您可以简单地使用array_filter函数来获取匹配的城市:
$ids = explode(',', $idsString);
$cities = array_filter($data->cities, static function($city) use ($ids) {
return in_array($city->id, $ids);
});
var_dump($cities);
推荐阅读
- git - 为什么要选择 ATX 或 SETEXT 降价标头样式?
- angular - 如何在 Ionic 4 中清除缓存
- c# - DbContext 不更新数据库
- html - 这是在谷歌浏览器(使用控制台)中自动填充网页的代码的一部分,它是什么编程语言?
- bash - Git bash 帮助选择更改并持续到最后
- cypress - Cypress.io: Waiting for results of exec command
- android-studio - 此 AVD 的配置缺少内核文件
- ios - 如何使 Firebase 推送通知工作
- git - Azure DevOps Git 存储库 - 不包括更改中的所有文件
- regex - 需要交换2行