layer *ret = malloc(sizeof(*ret));
给出数据,如何确定使用foreach找到重复的数据(行1和行3)?我现在正在玩这段代码。
更新:02/14/2020-我想出了这种算法。我添加了一个标志来确定是否找到重复项。
#define ALLOC(t) ((t *)calloc(1, sizeof(t)))
#define ALLOC_ARRAY(t, n) ((t *)calloc(n, sizeof(t)))
layer *ret = ALLOC(layer);
答案 0 :(得分:1)
您可以通过嵌套循环遍历每个元素并将其组合为当前元素来实现此目的。 尝试类似的事情:
<?php
$results = [
['name' => 'Benjoe', 'number' => '001'],
['name' => 'Benjoe', 'number' => '002'],
['name' => 'Benjoe', 'number' => '001'],
];
function compare($log1, $log2, $index1, $index2)
{
return $log1['name'] == $log2['name']
&& $log1['number'] == $log2['number']
&& $index1 != $index2;
}
foreach($results as $index1 => $log1) {
foreach ($results as $index2 => $log2) {
if (compare($log1, $log2, $index1, $index2)) {
echo "Item {$index1} has a duplicate at index {$index2}!<br/>\n";
}
}
}
这里是3v4l.org上工作示例的链接
上面的输出将是:
Item 0 has a duplicate at index 2!<br/>
Item 2 has a duplicate at index 0!<br/>
如果您不需要完全知道其他项目是重复的,则只需将值连接起来并将它们放入数组中,然后检查值是否已存在:
<?php
$results = [
['name' => 'Benjoe', 'number' => '001'],
['name' => 'Benjoe', 'number' => '002'],
['name' => 'Benjoe', 'number' => '001'],
];
$temp = [];
foreach($results as $index => $log) {
$val = $log['name'] . '_' . $log['number'];
if (in_array($val, $temp)) {
echo "Duplicate found at index {$index}<br/>\n";
} else {
$temp[] = $val;
}
}
输出:
Duplicate found at index 2<br/>
在3v4l.org上的工作示例
如果您从数据库中获得$results
,则另一种方法是按查询列对查询进行分组,然后添加count(*)
字段以找出存在的记录数。