skip to Main Content

basically I’m making a page where the information from mySQL database will be displayed. I have a column named topics in the database where the string (VARCHAR) goes like this:

Marketing, Business, Law, Medicine, …

I’m trying to break up this string after a comma and display them in a single line one by one like this:

<h6>Marketing</h6>
<h6>Business</h6>
<h6>Law</h6>
<h6>Medicine</h6>
<h6>...</h6>

I already have a loop for other rows and I’m not sure if it’s possible to make a loop in the loop, I’m not even sure if what i’m trying to achieve is possible but I belive it is. Here goes my full PHP code:

<?php
include_once '../handlers/db_conn.php';

$sql = $conn->prepare("SELECT * FROM esc WHERE hosting_country = ?");
$sql->bind_param("s", $hosting_country);

$hosting_country = 'Poland';
$sql->execute();

$result = $sql->get_result();
$resultCheck = mysqli_num_rows($result);

if ($resultCheck > 0) {

} else {
  echo '<p class="not_found">Nothing Found</p>';
}

while($escrow = $result->fetch_assoc()) {

?>

<div class="col-lg-6 col-md-12 col-sm-12 col-12">
  <div class="sec1_col1">
    <h2><?php echo $escrow['project_name'] ?></h2>
    <i class="fi fi-br-world"></i>
    <h3><?php echo $escrow['hosting_country'] ?></h3>
    <i class="fi fi-sr-calendar-lines"></i>
    <h3><?php echo $escrow['start_date'] ?> - <?php echo $escrow['end_date'] ?></h3>
    <h4 class="objectives"><?php echo $escrow['objectives'] ?></h4>
    <h5>Topics</h5>
    <h6><?php echo $escrow['topics'] ?></h6>
    <hr>
    <a href="#">Read more</a>
  </div>
</div>

<?php
}
?>

I’m wondering if it’s possible to create another loop in this loop for element, separate this string after a comma and display one by one in tag? Any help would be greatly appreciated. Thanks.

EDIT

This is what I’m trying to achieve:

This is how I want it to look

4

Answers


  1. You can do so with a simple explode by comma, trim (to remove spaces) and join (could be empty, but a newline is nicer).

    $topics = 'Marketing, Business, Law, Medicine';
    echo join(PHP_EOL, array_map(fn($topic) => '<h6>'. trim($topic) . '</h6>', explode(',' , $topics)));
    

    Output

    <h6>Marketing</h6>
    <h6>Business</h6>
    <h6>Law</h6>
    <h6>Medicine</h6>
    
    Login or Signup to reply.
  2. Quite simple (and yes, you may have as many nested loops inside your code as you want):

    Use explode to split your string, then loop over it.

    <!-- inside your loop... -->
    <h5>Topics</h5>
    <?php foreach(explode(", ", $escrow["topics"]) as $topic) { ?>
    <h6><?= $topic ?></h6>
    <?php } ?>
    
    Login or Signup to reply.
  3. You could split into an array and then map the array into containing tags:

    function h6($n)
    {
        return "<h6>$n</h6>";
    }
    
    $in = "Medicine,Arts,Law";
    $components = preg_split("/,/", $in);
    $html = implode(array_map('h6', $components));
    echo($html);
    
    Login or Signup to reply.
  4. Use the following code to explode

    <!DOCTYPE html>
    <html>
    <body>
    
    <?php
      $str = "Hello,World!,Beautiful,Day!";
      $arr = explode (",", $str);//;('Hello','World!','Beautiful','Day!');
      foreach ($arr as $item) {
        echo "<h6>".$item."</h6>";
      }
    ?>
    
    </body>
    </html>
    
    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search