застрял с простой логикой цикла php

#php #arrays

#php #массивы

Вопрос:

У меня есть array , в котором может быть любое количество элементов. Теперь я хочу зациклить этот массив и создать дизайн таким образом, чтобы внутри каждого из них li могло быть 15 элементов, следующий набор li будет создан на основе кратных 15 элементов.

Теперь в моем массиве ровно 15 элементов, а код, который я пытаюсь создать 2 li , должен создать только 1 li .

Может быть, моя логика слишком плоха или я что-то упускаю.

Вот мой код:-

   <?php $result = array(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15); ?>
    <div class="slide">
    <?php $design = '<ul class="slides"><li><div class="MainSlider">';
        foreach($result as $key=>$row) 
        {
            $design .= '<div class="MainSliderPic">'.$key.'</div>';
            if(($key 1)% 15 == 0){
            $design .= '</div></li><li><div class="MainSlider">';
            }

            if(count($result) == $key 1){     
            $design .= '</div></li></ul>';
            }
        }
    echo $design;
    ?>
    </div> 
  

Комментарии:

1. if(($key 1)% 15 == 0){ Оператор% должен быть проблемой, это означает, что если остаток от $key, деленный на 15, равен 15, сделайте это…

2. и просто немного ввода: в вашей 6-й строке вы написали ‘. $ key.’ … вы уверены, что хотите вывести ключ, а не значение? (Это можно сделать, заменив $key на $row)

3. Согласно вашему условию, у вас есть 15 записей, поэтому, когда ваше modulo(%) условие будет истинным, оно закроет li и снова начнет новое li , и, наконец, запись завершает li и div, поэтому, если у вас есть 15, 30, 45 ... записи, вы получите дополнительную li пустую

4. @Anant: я проголосовал за каждый ответ здесь, каждый ответ дал мне что-то для изучения, поэтому, пожалуйста, прекратите пинговать каждый день, чтобы проголосовать, я не получаю именно то, что вы хотите, чтобы я сделал. Возможно, я понятия не имею, потому что я здесь новичок, поэтому, пожалуйста, извините mysite и прекратите пинговать.

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

Ответ №1:

Вы можете использовать array_chunk для достижения этой цели:

 $result = array(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15);

$chunks = array_chunk($result, 15);

foreach ($chunks as $chunk) {
    echo '<ul><li>';

    echo implode('</li><li>', $chunk);

    echo '</li></ul>';
}
  

Ответ №2:

Не смешивайте открытие и закрытие тегов в своем коде. Делайте это отдельно там, где оно принадлежит, например

 $design = '<ul class="slides">';
$n = 0;
foreach($result as $key=>$row) {
    if ($n == 0)
        $design .= '<li><div class="MainSlider">';

    $design .= '<div class="MainSliderPic">' . $key . '</div>';

      $n;
    if ($n == 15) {
        $design .= '</div></li>';
        $n = 0;
    }
}

$design .= '</ul>';
echo $design;
  

Ответ №3:

Попробуйте следующий код:

 <?php $result = array(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15); ?>
    <div class="slide">
    <?php $design = '<ul class="slides"><li><div class="MainSlider">';
        foreach($result as $key=>$row) 
        {
            $design .= '<div class="MainSliderPic">'.$key.'</div>';
            if((($key 1)% 15 == 0) amp;amp; (count($result) != ($key 1))){
            $design .= '</div></li><li><div class="MainSlider">';
            }

            if(count($result) == $key 1){     
            $design .= '</div></li></ul>';
            }
        }
    echo $design;
    ?>
    </div>