Autor Zpráva
Nercom
Profil *
Potřebuji vypsat obrázky v různých složkách za pomocí cyklování for a switch a bohužel ikdyž GLOB() na print_r() vypisuje v pořádku, foreach ani případný sort nefunguje.
Warning: Invalid argument supplied for foreach() in....

<?
for ($a = 1; $a <= 4; $a++)
{
    switch ($a)
    {
      case "1": $slozka = 'slozka_123'; break;
      case "2": $slozka = 'slozka_456'; break;
      case "3": $slozka = 'slozka_789'; break;
      case "4": $slozka = 'slozka_abc'; break;
      default: $slozka = 'slozka_123'; break;
    }

    $obrazky = glob("../obrazky/".$slozka."/*_thumb.jpg");
    foreach ($obrazky as $data) // Warning: Invalid argument supplied for foreach() in
    {
    // vypis
    }    
}
?>



Glob ikdyž ve složce nic není, tak na count() vrací 1. Budu muset udělat podmínku if (count($obrazky) > "1"), aby výpis foreach fungoval jen když tam budou nějaké data.
juriad
Profil
To je divné. Můžeš poslat výstup var_dump($obrazky)?

Mimochodem, ten ošklivý switch můžeš nahradit za:
$slozky = ['slozka_123', 'slozka_456', 'slozka_789', 'slozka_abc'];

foreach ($slozky as $slozka) {
...


Asi tuším, co se děje. Může za to ta poznámka:
„On some systems it is impossible to distinguish between empty match and an error.“
glob na některých systémech vrací FALSE, když není nic nalezeného.
Co že to používáš za systém? Na Linuxu mi glob vrací prázdné pole, jak správně má.

A mimochodem:
count(FALSE) == 1

Ta podmínka, kterou chceš je:
if ($obrazky) {
  ...
} else {
  echo "Nic nebylo nalezeno";
}
protože tím projde každé pole, které má alespoň jeden prvek. A do else se dostane v obou případech - prádné pole nebo FALSE.

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:

0