【问题标题】:Php group repeated array valuesphp分组重复数组值
【发布时间】:2018-09-10 11:09:22
【问题描述】:

如何使用 PHP 对数组中重复的数组值进行分组?

我有一个这样的数组

array[0]=203,
array[1]=204,
array[2]=204,
array[3]=203,
array[4]=203,
array[5]=205

我需要类似的结果

[203]=1,
[204]=2,
[203]=2,
[205]=1

我想要连续重复数组值的计数

【问题讨论】:

  • 向我们展示您已经尝试过的代码。我们当然不会为您完成所有工作。
  • @MadhawaPriyashantha nope,OP 需要计算序列。
  • 您的输出看起来像是您希望将其作为 key=>value 结构,但数组不能多次包含同一个键​​
  • 数组不能多次包含同一个键​​。所以你的预期结果根本不可能。我想说什么,请看这里:- eval.in/1055953
  • 您提供的有问题的数据是您回答的提示...另一个提示 isset() 函数对您的任务非常有用。

标签: php arrays


【解决方案1】:

您的预期输出的一个选项是创建一个索引数组,其下方有关联数组。

这将创建这种数组:

array(4) {
  [0]=>
  array(1) {
    [203]=>
    int(1)
  }
  [1]=>
  array(1) {
    [204]=>
    int(2)
  }
  [2]=>
  array(1) {
    [203]=>
    int(2)
  }
  [3]=>
  array(1) {
    [205]=>
    int(1)
  }
}

这不是你想要的,但它是可能的。

代码循环并跟踪前一个值是什么,如果相同,它将计算该值,否则创建一个值为 1 的新索引和关联数组。

$array =[203,204,204,203,203,205];

$i=-1;
$prev = null;
$new=[];

foreach($array as $val){
    if($val != $prev){
        $i++;
    }
    if(!isset($new[$i][$val])){
        $new[$i][$val] =1;
    }else{
        $new[$i][$val]++;
    }

    $prev = $val;
}
var_dump($new);

https://3v4l.org/W2adN

【讨论】:

    【解决方案2】:
    array[0]=203;
    array[1]=204;
    array[2]=204;
    array[3]=203;
    array[4]=203;
    array[5]=205;
    
    $new_array = array();
    foreach ($array as $key => $value) {
        if(empty($new_array[$value])){
          $new_array[$value] = 1;
        }else{
          $new_array[$value]++;
        }
    }
    /*Now in the array $new_array you have the count of continuously repeating array values*/
    

    【讨论】:

    • 这只是获得array_count_values输出的更长的方法
    【解决方案3】:

    这可以在 php 中使用 array_count_value 函数在一行代码中完成。

    $arr[0]=203;
    $arr[1]=204;
    $arr[2]=204;
    $arr[3]=203;
    $arr[4]=203;
    $arr[5]=205;
    
    $result = array_count_values( $arr );
    var_dump( $result );
    

    输出

    array (size=3)
      203 => int 3
      204 => int 2
      205 => int 1
    

    【讨论】:

      猜你喜欢
      • 2011-08-29
      • 2016-12-24
      • 1970-01-01
      • 1970-01-01
      • 2012-11-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多