Autor Zpráva
PetraPP
Profil
Jak za pomocí IF provést řazení dat po třech. Data vypisuji přes foreach ($zdroj as $data).

<div>
<p>Data č.1</p>
<p>Data č.2</p>
<p>Data č.3</p>
</div>

<div>
<p>Data č.4</p>
<p>Data č.5</p>
<p>Data č.6</p>
</div>

<div>
<p>Data č.7</p>
</div>
juriad
Profil
Zavzpomínej na matametiku a použij operátor modulo (v PHP se zapisuje jako %). Budeš tedy muset upravit cyklus tak, abys věděla, kolikátý záznam zpracováváš.

for ($i = 0; $i < 10; $i++) {
  if ($i % 3 == 0) {
    if ($i > 0) {
      echo "</div>\n";
    }
    echo "<div>\n";
  }
  echo "Data číslo $i\n";
}

echo "</div>";
PetraPP
Profil
A pokud bych začátky <div> potřebovala ještě odlišovat různou třídou class, tak by PHP vypadalo jak?
<div class="test">, <div class="demo">, <div class="kolac">, <div class="plech"> a já nevím co ještě :)
juriad
Profil
Napřed musíš vymyslet pravidlo, které k aktální skupině přidělí třídu. Pak prostě tam tu třídu přidáš.
    echo "<div class=\"$trida\">\n";

Pokud by to bylo prostě v tomto pořadí, tak by mohlo stačit něco jako:
$tridy = array('test', 'demo', 'kolac', 'plech');
...
$trida = $tridy[$i / 3];
PetraPP
Profil
Naprosto šťastná, díky moc juriad ! Ještě naprosto poslední otázka, pak už dám pokoj :)

Pokud bych měla třídy uloženy jako $tridy = array('test', 'demo', 'kolac', 'plech'); a výpis by byl po třech, jak bych takovou třídu mohla vypsat v podobě?:
<div>
<p class="test">Data č.1</p>
<p class="demo">Data č.2</p>
<p class="kolac">Data č.3</p>
</div>
<div>
<p class="test">Data č.4</p>
<p class="demo">Data č.5</p>
<p class="kolac">Data č.6</p>
</div>
<div>
<p class="test">Data č.7</p>
</div>
juriad_
Profil *
Ano jen presunes vypis tridy ke kazde polozce a pole nebudes indexovat $i/3 ale $i%3.
PetraPP
Profil
Mockrát děkuji.
Ještě jsem našla jeden script, který bych ale potřebovala převést do IF:
($detekce_zarizeni->isMobile() ? ($detekce_zarizeni->isTablet() ? '2' : '1') : '3');

Jde o to, že tam chci přidat další parametry :)
anonymníí
Profil *
PetraPP:
if ($detekce_zarizeni->isMobile()) {
    if ($detekce_zarizeni->isTablet()) {
        echo 2;
    } else {
        echo 1;
    }
} else {
     echo 3;
}
PetraPP
Profil
Měla bych dotaz ještě na výpis do array:

for ($i = 0; $i < 10; $i++) {
$x = floor($i / 3);

  if ($i % 3 == 0) {
    if ($i > 0) {
      $data[$x] .= "</div>\n";
    }
    $data[$x] .= "<div>\n";
  }
  $data[$x] .= "Data číslo $i\n";
}
 
$data[$x] .= "</div>";

Bohužel do array nedostanu přímo tento HTML kus:
<div>
<p class="test">Data č.1</p>
<p class="demo">Data č.2</p>
<p class="kolac">Data č.3</p>
</div>

Zkoušela jsem různé možnosti, ale ani jedna mě nedovedla tam, kam bych potřebovala. Nějak nejsem na logické přemýšlení, což mě mrzí, protože musím s tím obtěžovat Vás :( Přesto za výpomoc budu hrooozně moc ráda.
juriad
Profil
PetraPP:
Můžeš si to klidně rozdělit do dvou cyklů:

# there are 3 classes => each div will contain at most 3 paragraphs
$classes = array('test', 'demo', 'kolac');
$max = 10;

$chunks = array();
for ($i = 0; $i < ceil($max / count($classes)); $i++) {
        # $i is number of the current div
        $chunk = "<div>\n";

        for ($j = 0; $j < count($classes) && $i * count($classes) + $j < $max; $j++) {
                # $j is number of current p inside current div
                $n = $i * count($classes) + $j;
                # $n is number of current p globally
                $chunk .= "<p class=\"" . $classes[$j] . "\">Data č. " . $n . "</p>\n";
        }

        $chunk .= "</div>\n";
        $chunks[] = $chunk;
}

print_r($chunks);

Ty zvýrazněné podmínky jsou o něco složitější, ale vevnitř pak již nemusíš dělit a modulit.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: