Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/237.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 从数组中删除唯一元素_Php_Arrays - Fatal编程技术网

Php 从数组中删除唯一元素

Php 从数组中删除唯一元素,php,arrays,Php,Arrays,因此,我一直在试图找到一种解决方案,从对象数组中删除唯一的元素并保留重复项,但几乎所有的问题都是关于如何删除重复项 该数组如下所示: [{"No":"123","Product":"Name X","Color":"blue"}, {"No":"123","Product":"Name X","Color":"green"}, {"No":"456","Product":"Name X2","Color":"red"}, {"No":"456","Product":"Name X2","C

因此,我一直在试图找到一种解决方案,从对象数组中删除唯一的元素并保留重复项,但几乎所有的问题都是关于如何删除重复项

该数组如下所示:

[{"No":"123","Product":"Name X","Color":"blue"},
 {"No":"123","Product":"Name X","Color":"green"},
 {"No":"456","Product":"Name X2","Color":"red"},
 {"No":"456","Product":"Name X2","Color":"blue"},
 {"No":"789","Product":"Name X3","Color":"yellow"}]
$db_result = array(); // Your array with duplicates

$count_occurrences = array();

foreach($db_result as $k=>&$v)
{
    $count_occurrences[$v['No']] = array(
        'key'=>$k,
        'count'=>(isset($count_occurrences[$v['No']]['count']) ? ($count_occurrences[$v['No']]['count'] + 1) : 1)
    );
}
unset($v);

foreach($count_occurrences as &$v)
{
    if($v['count'] === 1)
    {
        unset($db_result[$v['key']]);
    }
}
unset($v);
我需要检查
No
是否唯一,如果唯一,则将其删除。之后,阵列将如下所示:

[{"No":"123","Product":"Name X","Color":"blue"},
 {"No":"123","Product":"Name X","Color":"green"},
 {"No":"456","Product":"Name X2","Color":"red"},
 {"No":"456","Product":"Name X2","Color":"blue"}]

我试着从一开始就只获取重复的行(MySQL),但是所有的解决方案都使用了
groupby
HAVING
,它只返回重复的行,但也合并了它们。

所以你想删除只出现一次的数字。你可以在两次“通行证”中完成这项工作

首先,建立数字列表及其出现频率:

$numbers = array_reduce(
    $input,
    function($carry,$value) {
        if( !isset($carry[$value['No']])) $carry[$value['No']] = 0;
        $carry[$value['No']]++;
        return $carry;
    },
    []
);
$uniques = array_filter($numbers,function($n) {return $n == 1;});
现在您有了一个唯一编号的列表。所以你可以去掉那些匹配这些数字的

$result = array_filter(
    $input,
    function($item) use ($uniques) {
        return !isset($uniques[$item['No']]);
    }
);

完成。

我会选择这样的方式:

[{"No":"123","Product":"Name X","Color":"blue"},
 {"No":"123","Product":"Name X","Color":"green"},
 {"No":"456","Product":"Name X2","Color":"red"},
 {"No":"456","Product":"Name X2","Color":"blue"},
 {"No":"789","Product":"Name X3","Color":"yellow"}]
$db_result = array(); // Your array with duplicates

$count_occurrences = array();

foreach($db_result as $k=>&$v)
{
    $count_occurrences[$v['No']] = array(
        'key'=>$k,
        'count'=>(isset($count_occurrences[$v['No']]['count']) ? ($count_occurrences[$v['No']]['count'] + 1) : 1)
    );
}
unset($v);

foreach($count_occurrences as &$v)
{
    if($v['count'] === 1)
    {
        unset($db_result[$v['key']]);
    }
}
unset($v);

但是为什么同一个id有不同的颜色?欢迎来到StackOverflow!你说你已经尝试过一些事情了-你能发布你使用的代码吗?你也可以用sql查询来做到这一点:-
选择No,按c>1的产品分组计算(*)为c。检查引用:-您可以尝试先删除重复项,然后找到您获得的值,并在原始数组中删除它,以最终获得您想要的值,这只是一个想法。