我已经被这个问题困扰了一段时间,我在互联网上能找到的只是如何删除重复项。我是 PHP 新手,所以非常感谢简单的答案。
假设我有一个包含姓氏、地址、事故发生时间和事故原因的多维数组,如下所示:
[
['Adams','King Street 12','14:25','Heart Attack'],
['Ellis','Vine Street 4','02:48','Broken Leg'],
['Adams','Parker Street 43','20:10','Heart Attack'],
]
我需要查找多次发生相同事故的条目,因此对于这个短数组,输出应如下所示:
Adams King Street 12 14:25 Heart Attack
Adams Parker Street 43 20:10 Heart Attack
我试过了
$answer = array_unique(array_diff_assoc($whole_ar, array_unique($whole_ar)));
但这似乎不适用于多维数组。
我想你必须首先分步骤执行此操作,你需要 php5.5 或更高版本,然后放置一个
array_column()
每个键上都是这样
$myArray = array(
array(
'Adams','King Street 12','14:25','Heart Attack'
),
array(
'Ellis','Vine Street 4','02:48','Broken Leg'
),
array(
'Adams','Parker Street 43','20:10','Heart Attack'
)
);
接下来,您调用并找到第一个键(名称)的重复项
$name = array_column($myArray, '0');
$address = array_column($myArray, '1');
$time = array_column($myArray, '2');
$injury = array_column($myArray, '3');
接下来我们统计出现的次数
$count_names = array_count_values($name);
对每个标准执行此操作
然后使用 if 构造选择适当的数组,
if ($count_names > 0){
...
}
最终使用 if 构造的结果选择适当的数据行
对输入进行单个循环。填充临时查找数组,并使用第 4 列中每个唯一值的第一次出现来填充该数组(键
[3]
)。当给定值第二次出现时,将缓存的第一行和当前行推入结果数组中。我将通过使用唯一值作为结果数组中的第一级键来将事物分开。一旦结果数组包含给定值,则任何后续遇到的情况都可以直接推入结果数组,而无需检查临时数组。
代码:(演示)
$array = [
['Adams', 'King Street 12', '14:25', 'Heart Attack'],
['Ellis', 'Vine Street 4', '02:48', 'Broken Leg'],
['Adams', 'Parker Street 43', '20:10', 'Heart Attack'],
['Neil', 'Jack Street 9', '12:25', 'Broken Heart'],
['Colin', 'Queen Street 18', '05:48', 'Restless Leg'],
['Artemis', 'First Street 1', '10:17', 'Broken Leg'],
['Rufus', 'Long Street 5', '11:11', 'Dog Attack'],
];
$result = [];
foreach ($array as $row) {
if (isset($result[$row[3]])) {
$result[$row[3]][] = $row;
} elseif (isset($first[$row[3]])) {
$result[$row[3]] = [$first[$row[3]], $row];
} else {
$first[$row[3]] = $row;
}
}
var_export($result);
输出(来自我的样本数据):
array (
'Heart Attack' =>
array (
0 =>
array (
0 => 'Adams',
1 => 'King Street 12',
2 => '14:25',
3 => 'Heart Attack',
),
1 =>
array (
0 => 'Adams',
1 => 'Parker Street 43',
2 => '20:10',
3 => 'Heart Attack',
),
),
'Broken Leg' =>
array (
0 =>
array (
0 => 'Ellis',
1 => 'Vine Street 4',
2 => '02:48',
3 => 'Broken Leg',
),
1 =>
array (
0 => 'Artemis',
1 => 'First Street 1',
2 => '10:17',
3 => 'Broken Leg',
),
),
)