在 Laravel 中搜索和返回带有子数组的数组,可以使用 array_filter
函数结合匿名函数来实现。
首先,使用 array_filter
函数对数组进行过滤,传入一个匿名函数作为过滤条件。在匿名函数中,可以使用 array_key_exists
函数来判断数组中是否存在指定的键,并使用 is_array
函数来判断该键对应的值是否为数组。如果满足这两个条件,则返回 true
,表示该子数组符合要求,会被保留下来。
以下是一个示例代码:
$array = [
['id' => 1, 'name' => 'John', 'children' => ['Alice', 'Bob']],
['id' => 2, 'name' => 'Jane', 'children' => ['Charlie', 'David']],
['id' => 3, 'name' => 'Mary', 'children' => ['Eve']],
['id' => 4, 'name' => 'Peter'],
];
$searchKey = 'children';
$result = array_filter($array, function ($item) use ($searchKey) {
return array_key_exists($searchKey, $item) && is_array($item[$searchKey]);
});
print_r($result);
运行以上代码,将会输出符合条件的子数组:
Array
(
[0] => Array
(
[id] => 1
[name] => John
[children] => Array
(
[0] => Alice
[1] => Bob
)
)
[1] => Array
(
[id] => 2
[name] => Jane
[children] => Array
(
[0] => Charlie
[1] => David
)
)
[2] => Array
(
[id] => 3
[name] => Mary
[children] => Array
(
[0] => Eve
)
)
)
在 Laravel 中,还可以使用 Collection 类的 filter
方法来实现相同的功能。首先,将数组转换为 Collection 对象,然后使用 filter
方法传入一个匿名函数作为过滤条件。在匿名函数中,使用 Arr
类的 has
方法来判断数组中是否存在指定的键,并使用 Arr
类的 accessible
方法来判断该键对应的值是否为数组。如果满足这两个条件,则返回 true
,表示该子数组符合要求,会被保留下来。
以下是使用 Collection 的示例代码:
use Illuminate\Support\Arr;
use Illuminate\Support\Collection;
$array = [
['id' => 1, 'name' => 'John', 'children' => ['Alice', 'Bob']],
['id' => 2, 'name' => 'Jane', 'children' => ['Charlie', 'David']],
['id' => 3, 'name' => 'Mary', 'children' => ['Eve']],
['id' => 4, 'name' => 'Peter'],
];
$searchKey = 'children';
$collection = collect($array);
$result = $collection->filter(function ($item) use ($searchKey) {
return Arr::has($item, $searchKey) && Arr::accessible(Arr::get($item, $searchKey));
});
print_r($result->all());
运行以上代码,将会输出相同的结果。
在 Laravel 中,还可以使用 Eloquent ORM 来进行数据库查询,并使用关联模型来处理具有子数组的数据。这样可以更方便地进行搜索和返回带有子数组的数组。
希望以上信息对你有所帮助!如果有任何问题,请随时提问。