2016-05-30 13 views
1

Ich habe ein Array wie folgt aus:Wie überprüft man vor der Verwendung der Elemente des Arrays?

$results = $stmt->fetchAll(PDO::FETCH_ASSOC); 

/* 
Array 
(
    [0] => Array 
     (
      [id] => 191 
      [name] => Ali 
      [range] => today 
     ) 

    [1] => Array 
     (
      [id] => 190 
      [name] => John 
      [range] => today 
     ) 

    [2] => Array 
     (
      [id] => 189 
      [name] => peter 
      [range] => in last week 
     ) 

    [3] => Array 
     (
      [id] => 180 
      [name] => Ali 
      [range] => in last week 
     ) 

    [4] => Array 
     (
      [id] => 170 
      [name] => Jack 
      [range] => in last week 
     ) 
) 
*/ 

Und ich versuche, ein HTML dynamisch wie diese zu machen:

<div id = "notification_box"> 
    <div class= "cases"> 
     <div class="title">today</div>       
     <table> 
      <tr> 
       <td>191</td> 
       <td>Ali</td> 
      </tr> 
      <tr> 
       <td>190</td> 
       <td>John</td> 
      </tr> 
     </table> 
    </div> 
    <div class= "cases"> 
     <div class="title">yesterday</div>     
    </div> 
    <div class= "cases"> 
     <div class="title">in last week</div>  
     <table> 
      <tr> 
       <td>189</td> 
       <td>Peter</td> 
      </tr> 
      <tr> 
       <td>180</td> 
       <td>Ali</td> 
      </tr> 
      <tr> 
       <td>170</td> 
       <td>Jack</td> 
      </tr> 
     </table> 
    </div> 
</div> 

Hier ist mein Code:

$html = ''; 
$last_item_range = ''; 

foreach ($results as $key => $item) 
{ 
    $next_item = (is_array($results[$key+1])) ? $results[$key+1] : null; 

    if ($item['range'] != $last_item_range) 
    { 
     $html .= '<div class="cases">'; 
     $html .= sprintf('<div class="title">%s</div>', $item['range']); 
     $html .= '<table>'; 

     $last_item_range = $item['range']; 
    } 

    $html .= '<tr>'; 
    foreach($item as $value){ $html .= sprintf('<td>%s</td>', $value); } 
    $html .= '</tr>'; 

    if ($next_item['range'] != $item['range']) 
    { 
     $html .= '</table>'; 
     $html .= '</div>'; 
    } 
} 

echo $html; 

Aber diese Linie $results[$key+1] wirft diese Notiz:

Hinweis: undefiniert Offset

Wie kann ich es beheben?

Kannst du mir bitte auch sagen, dass ich das richtig mache? Oder gibt es einen besseren Algorithmus, um HTML zu erstellen?

+0

Vielleicht mit 'isset ($ results [$ key + 1]' statt 'is_array ($ results [$ key + 1] ' –

+0

@MarkBaker Gut gespielt .. Kannst du mir bitte auch sagen, dass ich das richtig mache? Oder sollte ich das anders machen? –

+0

Ich bin mir ziemlich sicher, dass es eine bessere Möglichkeit gibt, die Anzahl der Spalten einzustellen pure css, aber ich bin kein Experte in css –

Antwort

1

diese Lösung Versuchen zwei Schleifen

$new_list = array(); 
foreach($array_list as $list) 
$new_list[$list['range']][] = $list; 

?> 
<div id="notification_box"> 
    <?php foreach($new_list as $item_name => $items): ?> 
    <div class= "cases"> 
     <div class="title"><?php echo $item_name ?></div> 
     <?php 
      if($items && is_array($items) ) { 

      ?> 
       <table> 
       <?php foreach($items as $item): ?> 
       <tr> 
        <td><?php echo $item['id'] ?></td> 
        <td><?php echo $item['name'] ?></td> 
       </tr> 
       <?php endforeach; ?> 
       </table> 
      <?php 

      }  
     ?> 
    </div> 
    <?php endforeach; ?> 
</div> 

Gesamtes Ergebnis mit: https://3v4l.org/CHpm9

+0

Danke .. upvote –

+0

Akzeptieren Sie diese Antwort Es könnte für andere hilfreich sein – user5200704

Verwandte Themen