PHP如何计算数组中的重复值
我想按groupid计算数组中的重复值: 例如:PHP如何计算数组中的重复值,php,arrays,multidimensional-array,duplicates,Php,Arrays,Multidimensional Array,Duplicates,我想按groupid计算数组中的重复值: 例如: Array ( [0] => Array ( [id] => 1230 [groupid] => 177 [activity_group_last] => 1229 [name] => First name ) [1] => Array (
Array
(
[0] => Array
(
[id] => 1230
[groupid] => 177
[activity_group_last] => 1229
[name] => First name
)
[1] => Array
(
[id] => 1231
[groupid] => 177
[activity_group_last] => 1229
[name] => Second name
)
[2] => Array
(
[id] => 1232
[groupid] => 178
[activity_group_last] => 1229
[name] => Other name
)
)
输出数组2 groupid=177和1 groupid=178:
Array
(
[0] => Array
(
[id] => 1231
[groupid] => 177
[activity_group_last] => 1229
[name] => Second name
[count] => 2
)
[1] => Array
(
[id] => 1232
[groupid] => 178
[activity_group_last] => 1229
[name] => Other name
[count] => 1
)
)
谢谢 如果$value包含数组,则:
$count = array_count_values(array_map(function($item) {
return $item['groupid'];
}, $value));
var_dump($count);
$_tmp = $count;
$unique = array_filter($value, function(&$item) use (&$_tmp, $count) {
if (!--$_tmp[$item['groupid']]) {
$item['count'] = $count[$item['groupid']];
return true;
}
return false;
});
var_dump($unique);
结果:
array(2) {
[1]=>
array(5) {
["id"]=>
int(1231)
["groupid"]=>
int(177)
["activity_group_last"]=>
int(1229)
["name"]=>
string(11) "Second name"
["count"]=>
int(2)
}
[2]=>
array(5) {
["id"]=>
int(1232)
["groupid"]=>
int(178)
["activity_group_last"]=>
int(1229)
["name"]=>
string(10) "Other name"
["count"]=>
int(1)
}
}
如果$value包含数组,则:
$count = array_count_values(array_map(function($item) {
return $item['groupid'];
}, $value));
var_dump($count);
$_tmp = $count;
$unique = array_filter($value, function(&$item) use (&$_tmp, $count) {
if (!--$_tmp[$item['groupid']]) {
$item['count'] = $count[$item['groupid']];
return true;
}
return false;
});
var_dump($unique);
结果:
array(2) {
[1]=>
array(5) {
["id"]=>
int(1231)
["groupid"]=>
int(177)
["activity_group_last"]=>
int(1229)
["name"]=>
string(11) "Second name"
["count"]=>
int(2)
}
[2]=>
array(5) {
["id"]=>
int(1232)
["groupid"]=>
int(178)
["activity_group_last"]=>
int(1229)
["name"]=>
string(10) "Other name"
["count"]=>
int(1)
}
}
您也可以使用迭代函数来实现这一点。如果您的输入数组存储在$input中,并且希望结果存储在$output中:
function remove_duplicates($input_array) {
$output_array = array(); // Create an empty array for output
foreach($input_array as $input) { // Loop the input array
if(array_key_exists($input['groupid'], $output_array)) {
// We've already seen this groupid at least once
// Increment count
$input['count'] = $output_array[$input['groupid']]['count'] + 1;
} else {
// First time we've seen this groupid
// Set count to 1
$input['count'] = 1;
}
// Store data in $output_array, indexed by group_id
$output_array[$input['groupid']] = $input;
}
}
// This is your input array
$input = array(array('id'=>1230,'groupid'=>177,'activity_group_last'=>1229,'name'=>'First name'),
array('id'=>1231,'groupid'=>177,'activity_group_last'=>1229,'name'=>'Second name'),
array('id'=>1232,'groupid'=>178,'activity_group_last'=>1229,'name'=>'Other name'));
// This will set the output array correctly
$output = remove_duplicates($input);
您也可以使用迭代函数来实现这一点。如果您的输入数组存储在$input中,并且希望结果存储在$output中:
function remove_duplicates($input_array) {
$output_array = array(); // Create an empty array for output
foreach($input_array as $input) { // Loop the input array
if(array_key_exists($input['groupid'], $output_array)) {
// We've already seen this groupid at least once
// Increment count
$input['count'] = $output_array[$input['groupid']]['count'] + 1;
} else {
// First time we've seen this groupid
// Set count to 1
$input['count'] = 1;
}
// Store data in $output_array, indexed by group_id
$output_array[$input['groupid']] = $input;
}
}
// This is your input array
$input = array(array('id'=>1230,'groupid'=>177,'activity_group_last'=>1229,'name'=>'First name'),
array('id'=>1231,'groupid'=>177,'activity_group_last'=>1229,'name'=>'Second name'),
array('id'=>1232,'groupid'=>178,'activity_group_last'=>1229,'name'=>'Other name'));
// This will set the output array correctly
$output = remove_duplicates($input);
嗯……算算?什么样的计算,在什么领域?请更具体一点在您的示例中似乎有一些数据丢失:当分组具有相同GroupID的2个数组时,仅保留1个id值和1个名称值。这是故意的吗?这是正确的例子。只需计算groupid计数并删除重复项。如果您的数组恰好由SQL查询填充,请从查询中执行此操作,而不是使用一些PHP代码。这是我的查询:$SQL='选择wall.id、members.groupid、last.activity\u group\u last、groups.name from\uuuu community\u wall AS wall、\uu community\u groups\u members AS members,_uuumod_表为最后一个,uuu community_组为组,其中members.memberid='.intval$uid.'和members.approved=1,members.groupid=wall.contentid和wall.post_by!='。intval$uid.'AND wall.type=groups AND wall.id>last.activity_group_last AND last.userid='.intval$uid.'AND last.activity_group_last>0 AND last.activity_group_last_new=0 AND groups.id=members.groupid按wall.id'排序;嗯……算算?什么样的计算,在什么领域?请更具体一点在您的示例中似乎有一些数据丢失:当分组具有相同GroupID的2个数组时,仅保留1个id值和1个名称值。这是故意的吗?这是正确的例子。只需计算groupid计数并删除重复项。如果您的数组恰好由SQL查询填充,请从查询中执行此操作,而不是使用一些PHP代码。这是我的查询:$SQL='选择wall.id、members.groupid、last.activity\u group\u last、groups.name from\uuuu community\u wall AS wall、\uu community\u groups\u members AS members,_uuumod_表为最后一个,uuu community_组为组,其中members.memberid='.intval$uid.'和members.approved=1,members.groupid=wall.contentid和wall.post_by!='。intval$uid.'AND wall.type=groups AND wall.id>last.activity_group_last AND last.userid='.intval$uid.'AND last.activity_group_last>0 AND last.activity_group_last_new=0 AND groups.id=members.groupid按wall.id'排序+1,但您可以添加一些注释,除非您渴望获得当今最晦涩的代码片段奖-但是我需要加上:[count]=>X来输出数组,我的朋友,你是石头+1,但您可以添加一些注释,除非您渴望获得当今最晦涩的代码片段奖-但是我需要加上:[count]=>X来输出数组,我的朋友,你是石头!此函数存在问题。它的输出:Array[]=>Array[id]=>1279[groupid]=>177[activity\u group\u last]=>1275[name]=>name[count]=>4,但我们还有其他数组输入:[2]=>Array[id]=>1232[groupid]=>178[activity\u group\u last]=>1229[name]=>此函数存在其他名称问题。它的输出:Array[]=>Array[id]=>1279[groupid]=>177[activity\u group\u last]=>1275[name]=>name[count]=>4脚本更新为将$input设置为您最初提供的值;在快速测试中,它运行良好。你能更具体地描述你看到的问题吗?这是这个函数的一个问题。它的输出:Array[]=>Array[id]=>1279[groupid]=>177[activity\u group\u last]=>1275[name]=>name[count]=>4,但我们还有其他数组输入:[2]=>Array[id]=>1232[groupid]=>178[activity\u group\u last]=>1229[name]=>此函数存在其他名称问题。它的输出:Array[]=>Array[id]=>1279[groupid]=>177[activity\u group\u last]=>1275[name]=>name[count]=>4脚本更新为将$input设置为您最初提供的值;在快速测试中,它运行良好。你能更具体地描述你看到的问题吗?