查找二维数组中特定列中的值多次出现的行

问题描述 投票:0回答:2

我已经被这个问题困扰了一段时间,我在互联网上能找到的只是如何删除重复项。我是 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)));
但这似乎不适用于多维数组。

php arrays multidimensional-array duplicates filtering
2个回答
3
投票

我想你必须首先分步骤执行此操作,你需要 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 构造的结果选择适当的数据行


0
投票

对输入进行单个循环。填充临时查找数组,并使用第 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',
    ),
  ),
)
© www.soinside.com 2019 - 2024. All rights reserved.