1

カテゴリ名(多くは繰り返し)で満たされた配列があり、配列の片側で繰り返しを排除する2次元配列を作成する必要があります。配列の反対側には、その合計回数が含まれます。カテゴリ名は元の配列に表示されていました。これが私が説明していることをよりよく理解できるように2つの写真です: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]++;
      }
    }

この例について私が理解していない主なことの1つは、配列内の配列です。実際にはここに3つのアレイがあります:

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

配列が3つある場合、それらのインデックスをどのように使用しますか?多分このような何か?:

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

3 に答える 3

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 に答える
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',
)

結果array_count_values():

array(
    'Cat 1' => 3,
    'Cat 2' => 2,
    'Cat 3' => 1,
    'Cat 4' => 1,
)
于 2012-05-18T21:10:08.723 に答える
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 に答える