【问题标题】:PHP - Count duplicate values within two dimensional array, then display only unique values with the countPHP - 计算二维数组中的重复值,然后仅显示具有计数的唯一值
【发布时间】:2014-10-02 23:44:57
【问题描述】:

我已经为此工作了几天......但仍然无法达到我想要的结果。对此的任何帮助将不胜感激...在此先感谢您。

我有一个多数组存储在 $log 中,当你 print_r($log) 时显示如下:

   Array ( [0] => Array ( [0] => Red [1] => Steel ) 
           [1] => Array ( [0] => Red [1] => Wood ) 
           [2] => Array ( [0] => Blue [1] => Wood ) 
         )

目前我有这个:

$counts = $log;
foreach ($log as $value) {
    foreach ($value as $k  => $v) {
        if (!isset($counts[$k])) $counts[$k] = array();
        if (!isset($counts[$k][$v])) $counts[$k][$v] = 0;
        $counts[$k][$v] += 1;
    }
}

foreach ($counts as $k => $v1) {
    foreach ($v1 as $v => $count) {
        echo "$v => $count <br />";
    }
}

哪些显示:

0 => Red 
1 => Steel 
Red => 2 
Blue => 1 
0 => Red 
1 => Wood 
Steel => 1 
Wood => 2 
0 => Blue 
1 => Wood  

但我真的希望得到以下结果:

<h2>Colors</h2>
Red => 2
Blue => 1

<h2>Materials</h2>
Steel => 1
Wood => 2

【问题讨论】:

    标签: php arrays counting


    【解决方案1】:

    如果你使用PHP &gt;= 5.5,你可以使用array_column(),与array_count_values()一起使用:

    $colors = array_count_values(array_column($log, 0));
    $materials = array_count_values(array_column($log, 1));
    

    See demo


    或者,如果您不使用PHP &gt;= 5.5,这将在PHP 4, 5 中工作:

    $colors = $materials = array();
    foreach ($log as $a){
        $colors[] = $a[0];
        $materials[] = $a[1];
    }
    
    $colors = array_count_values($colors);
    $materials = array_count_values($materials);
    

    See demo 2


    Click here for sample use case that will work with either method.

    【讨论】:

      【解决方案2】:

      我是这样做的:

      <?php
      
      $log = array (
        array('Red', 'Steel'),
        array('Red', 'Wood'),
        array('Blue', 'Wood')
      );
      
      $materials = array();
      $colors = array();
      
      foreach($log as $line) {
        $colors[$line[0]] = (!isset($colors[$line[0]])) ? 1 : $colors[$line[0]] + 1;
        $materials[$line[1]] = (!isset($materials[$line[1]])) ? 1 : $materials[$line[1]] + 1;
      }
      
      ?>
      
      <h2>Colors</h2>\n
      <?php
      foreach ($colors as $color => $amount)
        echo "{$color} => {$amount}<br>\n";
      ?>
      <h2>Materials</h2>\n
      <?php
      foreach ($materials as $material => $amount)
        echo "{$material} => {$amount}<br>\n";
      ?>
      

      【讨论】:

        猜你喜欢
        • 2022-01-12
        • 1970-01-01
        • 2021-12-10
        • 1970-01-01
        • 1970-01-01
        • 2017-10-24
        • 1970-01-01
        • 1970-01-01
        • 2014-04-16
        相关资源
        最近更新 更多