2016-04-28 2 views
0

В настоящее время я работаю над страницей, которая вызывает базу данных mySQL для заполнения списка членов. Однако мне нужно, чтобы этот список был разделен на две равные части, так что половина может плавать влево и вправо вправо. Тем не менее, я победил эту лошадь до смерти и до сих пор не могу понять, как разделить массив.PHP: разделите массив mySQLi на два div?

Вот что я в настоящее время:

<div class="holder"> 
    <?php 
    $members = $db->query('SELECT * FROM tableContacts ORDER BY lastName ASC'); 
    $rowcount = mysqli_num_rows($members); 
    if ($rowcount > 0) { ?> 
     <div class="members-left"> 
      <ul class="members"> 
       <?php while ($row = $members->fetch_assoc()) { ?> 
        <li class="member"> 
         //SOME CONTENT HERE 
        </li> 
       <?php } ?> 
      </ul> 
     </div> 
    <?php } ?> 
</div> 

Однако, я хочу, чтобы выход выглядеть примерно так (скажем, моя таблица имеет 10 членов):

<div class="holder"> 
    <!--output first half of members from table: --> 
    <div class="members-left"> 
     <ul class="members"> 
      <li class="member">...</li> 
      <li class="member">...</li> 
      <li class="member">...</li> 
      <li class="member">...</li> 
      <li class="member">...</li> 
     </ul> 
    </div> 

    <!--output second half of members from table: --> 
    <div class="members-right"> 
     <ul class="members"> 
      <li class="member">...</li> 
      <li class="member">...</li> 
      <li class="member">...</li> 
      <li class="member">...</li> 
      <li class="member">...</li> 
     </ul> 
    </div> 

</div> 

Я пробовал настройки счетчики и использование таких вещей, как if($i <= $rowcount/2), но безрезультатно. Любая помощь будет оценена с большой благодарностью - я очень новичок в mySQL и имею ограниченное знание PHP, поэтому это меня сильно озадачивает.

+1

'если ($ я == $ rowcount/2) echo '

ответ

0

добавить контрольную переменную типа «$ i». добавьте +1 к $ i в каждый цикл. и проверьте, достиг ли $ i половину числа строк. если достигнуто близко ул и ДИВ и открыт новый ДИВ и ул и установить $ я до 0

<div class="holder"> 
    <?php 
    $members = $db->query('SELECT * FROM tableContacts ORDER BY lastName ASC'); 
    $rowcount = mysqli_num_rows($members); 
    $i=0; 
    if ($rowcount > 0) { ?> 
     <div class="members-right"> 
      <ul class="members"> 
       <?php while ($row = $members->fetch_assoc()) { ?> 
        <li class="member"> 
         //SOME CONTENT HERE 
        </li> 
       <?php 
       $i++; 
       if($i>=($rowcount/2)){ 
       echo '</ul></div> 
<div class="members-right"> 
     <ul class="members">'; 
$i=0; 
        } 

        } ?> 
      </ul> 
     </div> 
    <?php } ?> 
</div> 
+0

Большое вам спасибо! Это было именно то, что мне нужно. Очень дорогой помощник. – Johnny

+0

Ваш приветственный @Johnny – mgunduz

0

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

Первая половина:

for($i = 0; $i <= $rowcount/2 && $row = $members->fetch_assoc(); $i++) 

Вторая половина

while ($row = $members->fetch_assoc()) 

Пример с HTML

<div class="members-left"> 
    <ul class="members"> 
     <?php for($i = 0; $i <= $rowcount/2 && $row = $members->fetch_assoc(); $i++) { ?> 
      <li class="member"> 
       // do something with $row 
      </li> 
     <?php } ?> 
    </ul> 
</div> 
<div class="members-right"> 
    <ul class="members"> 
     <?php while ($row = $members->fetch_assoc()) { ?> 
      <li class="member"> 
       // do something with $row 
      </li> 
     <?php } ?> 
    </ul> 
</div> 
+0

Большое спасибо! Хотя ваше решение не так просто, как некоторые другие, это определенно сделало трюк. Очень признателен! – Johnny

0

Я бы ReCo помогите вам сделать 2 массива ваших членов, а затем распечатайте их. Преимущество состоит в том, что у вас будет больше контроля над членами, и ваш код станет более читаемым для последующего использования;

<?php 
$i =0; 
while ($row = $members->fetch_assoc()) { 
if($i % 2 == 0) 
    { 
     $right_members[] = $row; 
    } 
else 
    { 
    $left_members[] = $row; 
$i++; 
} 
echo ' 
<div class="members-right"> 
    <ul class="members">'; 
foreach($right members as $r_member){ 
echo '<li class="member">...</li>'; 
} 
echo ' 
    </ul> 
</div>'; 

//SAME WITH LEFT MEMBERS 
?> 
0

После встречное была идея, я не буду обсуждать на том, логику модели в представлении;)

хорошо, решение было бы:

<div class="holder"> 
    <div class="members-column"> 
     <ul class="members"> 
     <?php 
     $members = $db->query('SELECT * FROM tableContacts ORDER BY lastName ASC'); 
     $rowcount = mysqli_num_rows($members); 
     $i = 0; 
     while ($row = $members->fetch_assoc()) { 
     ?> 
      <li class="member"> 
       //SOME CONTENT HERE 
      </li> 

     <? 
     // Check if current row is the 'middle count', creating a new column 
     if ($i === ceil($rowcount/2)) : ?> 
      </ul> 
     </div> 
     <div class="members-column"> 
      <ul class="members"> 
     <?php endif; ?> 
     <?php 
      $i++; 
     } 
     ?> 
     </ul> 
    </div> 
</div> 
Смежные вопросы