php - 使用laravel中的对象值从多维数组中删除数组
问题描述
我需要从下面的数组中删除重复的数组。
第一个和第三个数组相同,只考虑“id”
$data = [
[
'id' => 'test_fun%test',
'text' => 'test_fun',
'data-value' => 'test',
],
[
'id' => 'test_fun1%test',
'text' => 'test_fun1',
'data-value' => 'test',
],
[
'id' => 'test_fun%test',
'text' => 'test_fun',
'data-value' => 'test',
'selected' => true
]
];
我试图在下面的代码。
-> array_unique($data);
-> array_map("unserialize", array_unique(array_map("serialize", $data)));
预期产出
$data = [
[
'id' => 'test_fun1%test',
'text' => 'test_fun1',
'data-value' => 'test',
],
[
'id' => 'test_fun%test',
'text' => 'test_fun',
'data-value' => 'test',
'selected' => true
]
];
解决方案
array_unique
"selected"
由于您在第三个数组中,因此无法正常工作。我同意这很不清楚的评论,但对我来说,您似乎正在寻找自定义过滤规则,所以一个普通的旧foreach
工具是这项工作的工具。
<?php
$data = [
[
'id' => 'test_fun%test',
'text' => 'test_fun',
'data-value' => 'test',
],
[
'id' => 'test_fun1%test',
'text' => 'test_fun1',
'data-value' => 'test',
],
[
'id' => 'test_fun%test',
'text' => 'test_fun',
'data-value' => 'test',
'selected' => true
]
];
$filtered = [];
foreach ($data as $row) {
$id = $row['id'];
$selected = $row['selected'] ?? false;
if (isset($filtered[$id])) {
if (!$selected) {
continue;
}
unset($filtered[$id]);
}
$filtered[$id] = $row;
}
// optional use if you don't want ids for keys
$filtered = array_values($filtered);
print_r($filtered);
推荐阅读
- android - 模拟器预览与实际设备不同
- git - 在所有分支中显示用户的最新提交
- sql - 如何将像 3212007 这样的整数转换为日期 3-21-2007 uisng IBM DB2 SQL?
- rest - 如何重申 json 响应以提取令牌并使用 for-each 活动进行 restapi 调用
- node.js - 使用带有 Typescript 的 Sinon SinonStubbedInstance
- html - 如何更改部分背景?
- jquery - 将多选作为查询参数传递时出现问题
- html - 在 svg 中定义大量相同图标的轻量级解决方案
- junit4 - @SelectPackages 不适用于 Maven CLI
- javascript - 如何在 JavaScript 中将特定年份添加到当前年份?