【问题标题】:count of duplicate elements in an array in phpphp中数组中重复元素的计数
【发布时间】:2012-11-04 23:51:19
【问题描述】:

嗨, 我们如何找到multidimensional array 中重复元素的数量?

我有一个这样的数组

Array
(
    [0] => Array
        (
            [lid] => 192
            [lname] => sdsss
        )

    [1] => Array
        (
            [lid] => 202
            [lname] =>  testing
        )

    [2] => Array
        (
            [lid] => 192
            [lname] => sdsss
        )

    [3] => Array
        (
            [lid] => 202
            [lname] =>  testing
        )

)

如何找到每个元素的计数?

即,ID为192202等的条目计数

【问题讨论】:

  • 简单地循环并创建一个以lid为键和增量(++)为值的新数组。
  • 值下的键是什么重要吗?或者如果相同的值在各种不同的键下,它算作重复?

标签: php multidimensional-array


【解决方案1】:

你可以采用这个技巧;将数组的每一项(本身就是一个数组)映射到其各自的['lid'] 成员,然后使用array_count_value() 为您进行计数。

array_count_values(array_map(function($item) {
    return $item['lid'];
}, $arr);

另外,它是单行的,因此增加了精英黑客的地位。

更新

从 5.5 开始,您可以将其缩短为:

array_count_values(array_column($arr, 'lid'));

【讨论】:

  • 加入精英黑客身份”!哈哈! +1
【解决方案2】:
foreach ($array as $value) 
{
    $numbers[$value[lid]]++;
}
foreach ($numbers as $key => $value) 
{
    echo 'numbers of '.$key.' equal '.$value.'<br/>';
}

【讨论】:

    【解决方案3】:

    以下代码将计算数组的重复元素。请查看并尝试此代码

     $arrayChars=array("green","red","yellow","green","red","yellow","green");
    
        $arrLength=count($arrayChars);
        $elementCount=array();
      for($i=0;$i<$arrLength-1;$i++)
        {
           $key=$arrayChars[$i];
          if($elementCount[$key]>=1)
           {
              $elementCount[$key]++;
           } else  {
              $elementCount[$key]=1;
           }
    
    
       }
    
       echo "<pre>";
       print_r($elementCount);
    

    输出:
    大批 ( [绿色] => 3 [红色] => 2 [黄色] => 2 )

    您还可以在以下链接中查看与数组处理类似的问题 http://solvemyquest.com/count-duplicant-element-array-php-without-using-built-function/

    【讨论】:

      【解决方案4】:

      以下代码将获取所有这些的计数 - 最后任何 > 1 的内容都将重复。

      <?php
      $lidCount = array();
      $lnameCount = array();
      
      foreach ($yourArray as $arr) {
      
        if (isset($lidCount[$arr['lid']])) {
          $lidCount[$arr['lid']]++;
        } else {
          $lidCount[$arr['lid']] = 1;
        }
      
        if (isset($lnameCount [$arr['lname']])) {
          $lnameCount [$arr['lname']]++;
        } else {
          $lnameCount [$arr['lname']] = 1;
        }
      
      }
      

      【讨论】:

        【解决方案5】:
        $array = array('192', '202', '192', '202');
        print_r(array_count_values($array));
        

        【讨论】:

          【解决方案6】:
          $orders = array(
           array(
              'lid' => '',
              'lname' => '',
          
            ))....
          $foundIds = array();
          foreach ( $orders as $index => $order )
          {
            if ( isset( $foundIds[$order['lid']] ) )
            {
              $orders[$index]['is_dupe'] = true;
              $orders[$foundIds[$order['lid']]]['is_dupe'] = true;
            } else {
              $orders[$index]['is_dupe'] = false;
            }
            $foundIds[$order['lid']] = $index;
          }
          

          【讨论】:

            【解决方案7】:

            试试这个代码:

            $array_count = array();
            foreach ($array as $arr) :
                if (in_array($arr, $array_count)) {
                    foreach ($array_count as $key => $count) :
                        if ($key == $arr) {
                            $array_count[$key]++;
                            break;
                        }
                    endforeach;
                } else {
                    $array_count[$arr] = 1;
                }
            endforeach;
            

            【讨论】:

              【解决方案8】:

              检查in_array()函数。

              【讨论】:

                猜你喜欢
                • 2011-06-22
                • 1970-01-01
                • 2016-04-21
                • 2020-12-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2013-08-20
                • 1970-01-01
                相关资源
                最近更新 更多