2016-05-30 2 views
1

У меня есть массив как это:Как проверить перед использованием элементов массива?

$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 
     ) 
) 
*/ 

И я пытаюсь сделать HTML динамически, как это:

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

Вот мой код:

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

Но эта линия $results[$key+1] выдает это уведомление:

Примечание: Не определено смещение

Как я могу это исправить?

Также, пожалуйста, скажите мне, что я правильно это сделал? Или есть лучший алгоритм для создания этого HTML?

+0

Возможно, с помощью 'Исеть ($ результаты [$ ключ + 1]', а не 'is_array ($ результаты [$ ключ + 1] ' –

+0

@MarkBaker Хорошо сыграл .. Просто вы также можете сказать мне, что я делаю это правильно? Или я должен делать это другим способом? –

+0

Я уверен, что есть лучший способ установить количество столбцов в чистый css, но я не эксперт в css –

ответ

1

Попробуйте это решение с помощью двух петель

$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> 

Посмотреть полный результат: https://3v4l.org/CHpm9

+0

Спасибо .. upvote –

+0

Принять этот ответ Может быть полезно другим – user5200704

Смежные вопросы