Pomoč pri loopu [PHP]

Pozdravljeni mojstri!

Imam eno težavo s katero se ukvarjam že predolgo. Imam array podatkov iz baze, skozi katerega spustim foreach. Problem je, da bi rad dobil posebno strukturo HTML-ja, recimo na vsake 3 rezultate naredi to.. Vem, poznam $counter % 3 === 0, ampak drugje je problem.

Želim dobit tako strukturo:

<div class="row">
                    <div class="span9">
                        <ul class="thumbnails">

**//// TEŽAVA JE, DA TU NOTRI SPRAVIM SAMO 3 REZULTATE**
                            <li class="span3">
                                <div class="thumbnail unit-bg">

                                </div>
                            </li>
                            <li class="span3">
                                <div class="thumbnail unit-bg">

                                </div>
                            </li>
                            <li class="span3">
                                <div class="thumbnail unit-bg">

                                </div>
                            </li>

                        </ul>
                    </div>
                </div>

Torej, če pogledate, ko delam foreach moram letet znotraj .thumbnails, ampak na vsake 3, rabim pa zgoraj dodat nov row, span9 in pa thumbnails in ga spodaj še zaključt.

Kako bi blo to najboljše uredit?

Hvala že vnaprej!

6 odgovorov

Uporabi array_chunk(), funkcija, ki zelo olajša življenje ko jo spoznaš :)

S tem najprej razbiješ elemete tvojga array na več manjših arrayov z velikostjo npr 3.
Nato pa en foreach vgnezdiš v drugega.

$chunks = array_chunk($array, 3);

foreach($chunks as $array){
     echo '<ul class="thumbnails">';
     foreach ($array as $item){
          echo '<li>'........'</li>';
     }
     echo '</ul>'
}
12

pred foreach dodas $i=0;

ob vsakem loopu dodas $i++;

preverjas (odvisno kam das i++... torej ali je i 3 ali 2):

if($i==3){
     $i=0;
     echo '</ul></div><div class="span9"><ul class="thumbnails">';
}
3

$c = 0;
foreach {
if ($c%3 == 0){
echo 'div.row, div.span9, ul.thumbnails';
}

echo 'li.span3';

if ($c%3 == 0){
echo '/ul /div /div';
}
$c++;
}
if (($c-1)%3!=0)
echo '/ul /div /div'; // če ni izpisalo zaključenega diva

Bo šlo?

2

no, spet sem zamudil za minutko.. blackmamba je podal boljso resitev

1

ooo, najlepša hvala! Sem zrihtal. Res, hvala vsem!

@blackmamba ima v rokavu dobre rešitve :)

2