1

我们有一个填充了类别名称的数组(其中许多是重复的),我们需要构建一个二维数组,以消除数组一侧的重复,并且在数组的另一侧有多少次的总数类别名称出现在原始数组中。这里有两张图片,以便您更好地理解我所描述的内容:http: //postimage.org/image/ptms64cl9/http://postimage.org/image/70x6qt0l9/。现在,我确信有不止一种方法可以做到这一点,但我想了解这本书是如何做到的。这是代码,请注意 $mismatch_categories 包含重复类别的原始数组:

 $category_totals = array(array($mismatch_categories[0], 0));
    foreach ($mismatch_categories as $category) {
      if ($category_totals[count($category_totals) - 1][0] != $category) {
        array_push($category_totals, array($category, 1));
      }
      else {
        $category_totals[count($category_totals) - 1][1]++;
      }
    }

关于此示例,我不了解的主要内容之一是数组中的数组。这里实际上没有 3 个数组:

 $category_totals = array(array($mismatch_categories[0], 0));

如果有 3 个数组,我如何使用它们的索引?可能是这样的?:

 $category_totals[0][0][0];
4

3 回答 3

1

检查 array_count_values() 函数(http://www.php.net/manual/pl/function.array-count-values.php)应该可以解决问题

源数组:

array(
    0 => 'Cat 1',
    1 => 'Cat 1',
    2 => 'Cat 1',
    3 => 'Cat 2',
    4 => 'Cat 2',
    5 => 'Cat 3',
    6 => 'Cat 4',
)

结果数组_count_values():

array(
    'Cat 1' => 3,
    'Cat 2' => 2,
    'Cat 3' => 1,
    'Cat 4' => 1,
)
于 2012-05-18T21:10:08.723 回答
1

希望它能帮助你理解。

<?php
     echo '<pre>';
     $mismatch_categories = array('cat', 'cat', 'cow', 'book', 'box', 'box', 'box');
     echo 'Input Mismatch Category::<br />';
     print_r($mismatch_categories);
     echo '<br />';
     $category_totals = array(array($mismatch_categories[0], 0));
     echo 'categroy totals that holds final data' . '<br />';
     $counter = 0;
     print_r($category_totals);
     foreach ($mismatch_categories as $category) {
         echo 'Iteration ' . $counter++ . '<br /><br />';
         echo 'Current category value::' . $category . "<br /><br />";
         echo 'Value of category_totals[' . count($category_totals) . '- 1][0] :: ' .         $category_totals[count($category_totals) - 1][0] . '<br/><br />';
         echo 'Are they equal' . '<br />';
         if ($category_totals[count($category_totals) - 1][0] != $category) {
              echo 'Not matched so pushed into array with occurence of one<br />';
              array_push($category_totals, array($category, 1));
         } else {
              echo 'matches so count is increased by 1' . "<br />";
              $category_totals[count($category_totals) - 1][1]++;
         }
         echo 'category totals:' . '<br />';
         print_r($category_totals);
   }
   echo 'Final value of category_totals::';
   print_r($category_totals);
?>
于 2012-05-18T19:58:27.927 回答
0

跟进评论中的建议:

<?php
$mismatch_categories = array('cat', 'cat', 'cow', 'book', 'box', 'box', 'box');

$cat_counts = array_count_values($mismatch_categories);
// = array('cat' => 2, 'cow' => 1, 'book' => 1, 'box' => 3)

$categories = array_unique($mismatch_categories);
// = array('cat', 'cow', 'book', 'box');
?>

换句话说,正是您正在寻找的东西。

在这里编写自己的处理循环的唯一原因是编码练习。

于 2012-05-19T07:49:33.360 回答