首页 > 解决方案 > 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。有没有办法可以使用第一个字符串中的值更好地过滤对象?然后迭代数组,并为每个

标签: phplaravel

解决方案


首先,您应该分解您的数据库字符串以获取 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);

推荐阅读