2017-03-04 4 views
1

複数のアレイに似値の数:PHPは、私はこれらのように、データベース内の値を持つ

Row 1 : ["2","3"] 
Row 2 : ["1","3"] 
Row 3 : ["2","3","4"] 

は、フロントエンドでは、私は今、私は同様の値の数を表示したい、すべての行を選択しました。コード上から所望の入出力/ Pの:例えばについて 私はこのような得1 = 1 = 2 2 = 3 3、4 = 1

iが上記の値をjson_decodeと使用しますprint_rのカウント:

Array ([0] => 2 [1] => 3) 
Array ([0] => 1 [1] => 3) 
Array ([0] => 2 [1] => 3 [2] => 4) 

注::行のリストを増やすことができます。どのようにして同様の値を見つけることができますか。

hereのようにarray_intersectを試しましたが、動作しませんでした。

例:ここに画像 Please Note Data in image, is different from above data

コードは、データの上に取得する:

$conn = new mysqli("localhost", "root", "", "ams"); 
    $query="SELECT * FROM attendance WHERE subject = '$subj'"; 
    $result = $conn->query($query); 


<table class="table table-responsive"> 
      <tr> 
       <th>Sr. No</th> 
       <th>Col 1 </th> 
       <th>Col 2</th> 
      </tr> 
      <form method="post"> 
       <?php 
       $i=1; 
        if (mysqli_num_rows($result) > 0) { 
         while ($row=mysqli_fetch_assoc($result)) { 

          $data = $row['att']; 
          $data = json_decode($data); 

          echo "<tr>"; 
          echo "<td>" . $i . "</td>"; 
          echo "<td>" . $row['date1'] . "</td>"; 
          echo "<td>" . print_r($data) . "</td>"; 
          echo "</tr>"; 
          $i++; 
         } 
        } 
       ?> 
      </form> 
      </table> 
+1

私は混乱しています。どのデータベースを使用していますか? – McStuffins

+0

私はMYSQLデータベースを使用しています –

+0

あなたはそれを応答として受け取るべきではありません。 Mysqlに接続するためにどのようなドライバを使用していますか?この質問にいくつかのコードを表示してください。それは非常に曖昧です。 – McStuffins

答えて

1

だから、私はあなたのために、このクラスを作りました。あなたがそれを初期化するとき、接続を作成します。

class RowData { 

    private $connection; 
    private $returnContent = array(); 
    private $stmt = null; 

    function __construct() { 
     $connection = new PDO("mysql:host=" . MYSQL_HOST . ";dbname=" . MYSQL_DB, MYSQL_USERNAME, MYSQL_PASSWORD); 
     $connection->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); 
     $connection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
     $this->connection = $connection; 
    } 

    public function get($subj) { 
     $this->getContentFromDB($subj); 
     $this->parseContent(); 
     return $this->returnContent; 
    } 

    private function getContentFromDB($subj) { 
     $stmt = $this->connection->prepare("SELECT * FROM attendance WHERE subject = '{$subj}'"); 
     $stmt->execute(); 
     $this->stmt = $stmt; 
    } 

    private function parseContent() { 
     $content = $stmt->fetchAll(PDO::FETCH_OBJ); 
     if(count($content) < 1) { 
      throw new Exception('Unable to find any attendies'); 
     } 
     foreach($content as $values) { 
      $row = $this->getJsonArray($values->att); 
      $this->findValues($row); 
     } 
    } 

    private function getJsonArray($content) { 
     return json_decode($content); 
    } 

    private function findValues(array $row) { 
     foreach($row as $key => $value) { 
      if(isset($this->returnContent[$value])) { 
       $this->returnContent[$value] = $this->returnContent[$value] + 1; 
      } else { 
       $this->returnContent[$value] = 1; 
      } 
     } 
     return; 
    } 
} 

ですので、ここで説明します。コンストラクタは、$x = new RowData();と書くときに初期化される関数になります。これは、MySQLデータベースへの接続を作成します。あなたがしなければならないのは、MYSQL_HOST、MYSQL_DB、MYSQL_USERNAME、MYSQL_PASSWORDの値を適切なものに変更することだけです。公的に利用できる唯一の機能はget()です。 get()関数は2つの独立した関数を呼び出し、1つの値をパラメータとして受け入れます。 1つの値は、$subjと呼ばれています。 get()関数の関数の1つは、指定したクエリを使用してMySqlテーブルからコンテンツを取得するだけです。 2番目の関数parseContent()は、PDOからobjを取得し、それをループします。最後に、$rowをパラメータとして受け取るfindValues()関数があります。この関数は、その数値がすでにデータセット内にあるかどうかを確認します。そうであれば、基本的にはカウンターです。それ以外の場合は、新しいキーを作成し、このようなものになるだろう。1.

get()関数から返された値に値を設定します。

array(2=>2, 1=>1, 3=>3, 4=>1) 

は、あなたがこのような何かを書くと、このクラスを使用するには:

$rowData = new RowData(); 
try { 
    $content = $rowData->get(); 
} catch (Exception $e) { 
    // No results were found 
} 

これを実現するための助けが必要な場合は、私に知らせてください。

関連する問題