Zjištění neexistujícího klíče v latte

Webster.K
Člen | 212
+
0
-

Zdravím všechny, řeším jednu drobnost a nevím si rady. Jde o ověření, zda existuje klíč v poli. Mám seznam knih

$pole = array(0=>'nazev_prvni_knihy',1=>'nazev_druhe_knihy');

Toto pole je tvořeno z databáze, nicméně některé indexy tam nejsou, nejde tedy o přesnou řadu 0,1,2,3,4,5… ale třeba jen o 0,1,2,5,6,8,9 atd.
V latte šabloně mám kód:

{ifset $seznamKnih[$informace->id_knihy]}

Problém je ten, že podmínka projde a sekne se to na řádku, kde tento index potřebuji vypsat, končí to tedy chybou: Undefined offset: 15, tedy, že index 15 neexistuje.

Když před $seznamKnih dám vykřičník, tedy ifset !$seznamKnih, vrátí to rovnou chybu: Cannot use isset() on the result of an expression (you can use „null !== expression“ instead)

Nenapadá někoho, co s tím?

David Matějka
Moderator | 6445
+
0
-

ukaz cely kod

Webster.K
Člen | 212
+
0
-
{foreach $informaceDB as $informace}
	{ifset $seznamKnih[$informace->id_knihy]}
		<div class="alert alert-danger">
			<div class="col-lg-12">
            	//tady jsou vypisovány všechny informace
				{$seznamKnih[$informace->id_knihy]}
            </div>
        </div>
     {/ifset}
{/foreach}

Do šablony je $seznamKnih plněn z funkce:

public function seznamKnihPole() {
        $data = $this->database->table('knihy')->where('stav',0);
        foreach ($data as $row) {
            $vysledek[$row->id_knihy] = $row->nazev_knihy;
        }
        if ($data) {
            return $vysledek;
        } else {
            return false;
        }
    }

a informace jsou plněny takto:

public function informace($typ = 0) {

        if ($typ) {
            $knihy = $this->database->table('informace')->where('datum < ?', $this->cas->aktualniDatum());
        } else {
            $knihy = $this->database->table('informace')->where('datum < ?', $this->cas->posunDnu('+7 days'));
        }
        if ($knihy) {
            return $knihy;
        } else {
            return false;
        }
    }

v ty tabulce informace nejsou informace ke všem knihám, tabulka knih je daleko větší

Webster.K
Člen | 212
+
0
-

napadlo mě ještě použít array_key_exists, takže bych měl řádek s IFem takto:

{if array_key_exists($informace->id_knihy,$seznamKnih)}

ale výsledek je stejný, opět nedefinovaný index

David Matějka
Moderator | 6445
+
0
-

to je divny, ten kod je spravne. opravdu je ta chyba na tom radku? tedy kdyz ho smazes, tak se prestane ta chyba zobrazovat?

Webster.K
Člen | 212
+
0
-

Aha, vypisuji dvě „stejný“ části a chyba byla, že v té části zatím chyběla podmínka, ale tím že jsou defakto stejné, jen jiný ten hlavní foreach, nevšiml jsem se toho, díky za nakopnutí správným směrem :) už to funguje :)