Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/231.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_Multidimensional Array_Duplicates - Fatal编程技术网

PHP如何计算数组中的重复值

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 (

我想按groupid计算数组中的重复值:

例如:

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设置为您最初提供的值;在快速测试中,它运行良好。你能更具体地描述你看到的问题吗?