1

たくさんの学生がいると想像してみてください。

学生:ベンサム..。

すべての学生は家に本のグループを持っています:

書籍:

  • サムABCD
  • ベンDEF
  • ライアンADGD

したがって、PHPでは、$studentsのデータ構造は次のようになります。

Array
(
    [0] => Array
        (
            [name] => Joe Smith
            [books] => Array
                (
                    [0] => A
                    [1] => B
                    [2] => C
                )

        )

)

Aが繰り返された回数と、ABやCなどを所有している人を数えたいと思います。phpでそれを行う1つの方法は、これを行うことです。

if (sizeof($potential_entries) > 0) :
  for ($j = 0, $potentialsize = sizeof($potential_entries); $j < $potentialsize; ++$j)     {
    for ($k = 0, $listsize = sizeof($student_book); $k < $listsize; ++$k) {
      if ($student_book[$k] == $potential_entry[$k]) :
        $match = 1;
        $student_book[$k]['like_count']++;
       endif;
    }
  }

これはあまり効率的ではなく、マップ構造またはハッシュテーブルが必要です。phpにはperlのような構造がありますか?または、手動でビルドする必要がありますか。編集:PHPで連想配列があることがわかりますか?ドキュメントで見つからなかった例を教えてください。サムの場合:

var_dump($potential_entry):

[0]=>array(2) { ["name"]=> string(1) "A" ["id"]=> string(11) "1348"}
[1]=>array(2) { ["name"]=> string(1) "B" ["id"]=> string(11) "1483"}
[2]=>array(2) { ["name"]=> string(1) "C" ["id"]=> string(11) "13"}
[3]=>array(2) { ["name"]=> string(1) "D" ["id"]=> string(11) "1174"}

それはサムのためです、残りのために私達は同じ構造を持っています。つまり、samは配列であり、booksは配列であり、samは本の配列を持っています。この例では

  • Dカウント=3sam ben ryan
  • カウント=2サムライアン
  • 等...
4

2 に答える 2

1

配列として$studentsがあり、この配列の各エントリに本と呼ばれる本の配列がある場合

$books = array(); 
for ($i = 0, $count = sizeof($students); $i++) {
   foreach ($student[$i]['books'] as $book) { 
      if (isset($books[$book])) { 
          $books[$book]++; 
      } else { 
          $books[$book] = 1;
      }
   }
}

この後、カウントが1より大きい$booksエントリは重複します。

foreach ($books as $key => $value) { 
   if ($value) > 1) { 
        echo "Book " . $key . " is a duplicate (" . $value . ")"; 
   }
}
于 2012-04-25T10:50:04.043 に答える
1
$aFullCount = array(); // in this array you will have results of all characters count.
$aCondition = array("A", "B"); // set condition you need to count down here.
$aConditionMatch = array(); // in here you will have all users ids who matched your A + B
if ($aUsers){
    foreach ($aUsers as $sUserKey=>$aOneUser){
        $aForCondition = array();
        if ($aPotentialEntries){
            foreach ($aPotentialEntries as $aOnePotentialEntry){
                $aForCondition[] = $aOnePotentialEntry["name"];
                if (!isset($aFullCount[$aOnePotentialEntry["name"]]))
                    $aFullCount[$aOnePotentialEntry["name"]] = 1;
                else
                    $aFullCount[$aOnePotentialEntry["name"]]++;
            }
        }

        $aConditionCheck = array_intersect($aForCondition, $aCondition);
        if (!array_diff($aConditionCheck, $aCondition))
            $aConditionMatch[] = $sUserKey;
    }
}
于 2012-04-25T11:11:30.110 に答える