2016-12-22 2 views
-1

Я хотел бы знать, можно ли классифицировать данные в группах при повторении эха.Использование foreach для категоризации данных

Например, если у меня есть таблица разных телефонов и отделите их по бренду, например, Apple, Samsung и т. Д., И я хочу, чтобы данные отображались вместе с заголовком марки телефона и под номером телефона.

компании Apple
iphone 4
iphone 4s
iphone 5

Samsung
Galaxy Note 2
Galaxy S4

<div id="wrap"> 
    <table> 
     <thead> 
      <tr> 
       <th><?php echo phones['brand']; ?></th> 
       <th>Price</th> 
      </tr> 
     </thead> 

     <tbody> 
      <?php foreach($phones as $phone): ?> 
       <tr> 
        <td><?php echo $phone['name']); ?> 
         <br> 
        <ul> 
         <li><?php echo $phone['price']); ?></li> 
        </ul> 
        </td> 
        <td>$<?php echo $phone['released']); ?></td> 
       </tr> 
      <?php endforeach; ?> 
     </tbody> 
    </table> 
</div> 

Это то, что я до сих пор, извините за ожидание ,

+1

да, это возможно. пожалуйста, покажите нам свою лучшую попытку достижения желаемого результата. –

+0

что вы пытаетесь сделать? вы что-нибудь сделали? –

+0

Извините, я отредактировал то, что я сделал до сих пор. – YABOI

ответ

0

Вот действительно простой пример. Предполагая, что вы ваши телефоны в массиве, как это:

$phones = [ 
    ['Apple', 'iphone 4'], 
    ['Apple','iphone 4s'], 
    ['Apple','iphone 5'], 
    ['Samsung','Galaxy Note 2'], 
    ['Samsung','Galaxy S4'] 
]; 

Вы просто следить за бренд, как вы выводите их, и всякий раз, когда бренд отличается от предыдущей марки, выходной заголовок для него.

$previous_brand = null; 
foreach ($phones as $phone) { 
    list($brand, $model) = $phone; 
    if ($brand != $previous_brand) { // check if current brand is different than previous 
     echo "<h3>$brand</h3>"; 
    } 
    echo "$model<br>"; 
    $previous_brand = $brand;  // current brand becomes previous brand for next iteration 
} 

Я сохранил минимальный HTML, чтобы он не отвлекал от рабочей части. Очевидно, вы можете добавить любую разметку, в которой вы нуждаетесь.

Важно при таком подходе является то, что он полностью зависит от вашего массива сортируется по марке, так что если это выходит из базы данных ORDER BY brand, или, если это какой-то другой источник, use one of the various PHP sort functions, чтобы получить его в таком порядке первый.

+0

Мои телефоны находятся в базе данных mySQL, нужно ли мне сначала начинать что-то другое? – YABOI

+0

Наверное, не сильно отличается. Просто выберите все телефоны, которые вы хотите отобразить, но обязательно добавьте «ORDER BY brand». –

+0

Благодарим вас за ответ. Как насчет эхо-сигнала в виде таблицы? – YABOI

0

Сначала делают

$phonesByBrand = []; 

foreach ($phones as $phone) 
{ 
    $phonesByBrand[$phone['brand']][] = $phone; 
} 

Теперь на ваш взгляд, вы можете сделать

<?php foreach($phonesByBrand as $brand => $phones): ?> 
    <div id="wrap"> 
    <table> 
     <thead> 
     <tr> 
      <th><?php echo $brand; ?></th> 
      <th>Price</th> 
     </tr> 
     </thead> 

     <tbody> 
     <?php foreach($phones as $phone): ?> 
      <tr> 
      <td> 
       <?php echo $phone['name']); ?> 
       <br> 
       <ul> 
       <li><?php echo $phone['price']); ?></li> 
       </ul> 
      </td> 
      <td> 
       $<?php echo $phone['released']); ?> 
      </td> 
      </tr> 
     <?php endforeach; ?> 
     </tbody> 
    </table> 
    </div> 
<?php endforeach; ?>