Search code examples
phpmysqlassociative-array

Splitting an Associative Array/Table


I’m using PHP to output a table based on mysql data. I’m using the following code:

$result = $db->query($sql);

 if ($result->num_rows > 0) {
 while($row = $result->fetch_assoc()) {
 echo "<tr>";
 echo "<td>", "<br>". $row["Name"]. "" .$row["message"]."".$row["timestamp"]."<br>","</td>";
 echo "</tr>";
   }
} else {
   echo "0 results";
}

Which produces a table that looks a bit like this:

--------------------------------
|Name 1   Message 1   timestamp |
--------------------------------
|Name 1   Message 2   timestamp |
--------------------------------
|Name 2   Message 1   timestamp | 
--------------------------------
|Name 3   Message 1   timestamp |
--------------------------------
|Name 3   Message 2   timestamp |
--------------------------------
|Name 3   Message 3   timestamp |
--------------------------------

What I would actually like is something that looks a bit like this:

Name 1
--------------------------------
|Message 1   | timestamp        |
--------------------------------
|Message 2   | timestamp        |
--------------------------------

Name 2
---------------------------------
|Message 1   |timestamp         | 
--------------------------------

Name 3
--------------------------------
|Message 1   |  timestamp       |
--------------------------------
|Message 2   |  timestamp       |
--------------------------------
|Message 3   |  timestamp       |
--------------------------------

Solution

  • The idea is to split name from the rest and only display it when the name changes on the design you must work a little.

    $result = $db->query($sql);
    
     if ($result->num_rows > 0) {
        $name = "";
         while($row = $result->fetch_assoc()) {
         
            if ($name == $row["Name"])
            {
                echo "<tr>";
                echo "<td>".$row["message"]."</td><td>".$row["timestamp"]."</td>";
                echo "</tr>";
            } else {
                echo "<tr>";
                echo "<td colspan=2>". $row["Name"]. "</td>";
                echo "</tr>";
                $name = $row["Name"];
            }
         }
    } else {
       echo "0 results";
    }