2017-03-04 2 views
1

Ich habe Werte in der Datenbank wie diese:PHP Similiar Werte in mehreren Arrays

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

In Frontend i ausgewählt alle Zeilen, jetzt möchte ich Zählung ähnliche Werte zeigen. Zum Beispiel: von oben Code o/p Gewünschter: Count für 1 = 1, 2 = 2, 3 = 3, 4 = 1

Wenn i obige Werte und unter Verwendung print_r json_decode i wie diese erhielt:

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

Hinweis: Liste der Zeilen kann erhöht werden, wie kann ich ähnliche Werte finden.

Ich versuchte array_intersect wie gezeigt here, aber hat nicht funktioniert.

ZB: Bild hier Please Note Data in image, is different from above data

-Code über Daten zu erhalten:

$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

Ich bin verwirrt. Welche Datenbank verwendest du? – McStuffins

+0

Ich benutze MYSQL-Datenbank –

+0

Sie sollten das nicht als Antwort bekommen. Welchen Treiber verwendest du, um dich mit Mysql zu verbinden? Können Sie bitte etwas Code in dieser Frage zeigen? Es ist sehr vage. – McStuffins

Antwort

1

Also, ich für Sie diese Klasse gemacht. Es wird die Verbindung erstellen, wenn Sie es initialisieren.

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; 
    } 
} 

Also, lassen Sie mich es erklären. Der Konstruktor wird die Funktion sein, die initialisiert wird, wenn Sie $x = new RowData(); schreiben. Es erstellt die Verbindung zur MySQL-Datenbank. Sie müssen lediglich die Werte MYSQL_HOST, MYSQL_DB, MYSQL_USERNAME, MYSQL_PASSWORD in die entsprechenden Werte ändern. Die einzige Funktion, die Ihnen zur öffentlichen Verwendung zur Verfügung steht, ist die get()-Funktion. Die Funktion get() ruft 2 separate Funktionen auf und akzeptiert einen Wert als Parameter. Der eine Wert ist, was Sie $subj genannt haben. Eine der Funktionen in der get()-Funktion ruft nur den Inhalt aus der MySql-Tabelle mit der von Ihnen bereitgestellten Abfrage ab. Die zweite Funktion parseContent() erhält ein Obj aus PDO und durchläuft es. Schließlich gibt es die findValues() Funktion, die $row als Parameter akzeptiert. Diese Funktion wird sehen, ob die Nummer bereits im Datensatz enthalten ist. Wenn es ist, dann ist es im Grunde ein Zähler. Ansonsten macht es einen neuen Schlüssel und setzt den Wert auf 1.

Die zurückgegebenen Werte aus der get() Funktion so etwas wie dieses wäre:

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

diese Klasse verwenden, würden Sie so etwas schreiben:

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

Hoffe, das hilft! Wenn Sie Hilfe bei der Implementierung benötigen, lassen Sie es mich wissen und ich bin mehr als glücklich, Ihnen zu helfen!

Verwandte Themen