Obsahuje dvourozměrné pole samé nuly?

Školení, která pořádám

Pokud má funkce skončit v případě, že dvourozměrné pole obsahuje samé nuly, lze postupovat takto:

<?php
$pole = array(array(0, 0), array(0, 1));

$same_nuly = true;
foreach ($pole as $radek) {
    foreach ($radek as $val) {
        if ($val) {
            $same_nuly = false;
            break 2;
        }
    }
}
if ($same_nuly) {
    return;
}
?>

Pokud pole obsahuje samé nezáporné hodnoty, tak se pro vyřešení úlohy dá obratně využít i funkce max:

<?php
if (max(max($pole)) == 0) {
    return;
}
?>

Připomínám, že pokud funkce max dostane jako jediný parametr pole, vrátí maximum z prvků tohoto pole. Vnitřní max tedy vrátí svůj nejvyšší prvek – v našem případě array(0, 1) – a vnější max z něj vrátí největší číslo.

Pravidla pro porovnávání hodnot různých typů jsou už popsána v dokumentaci, ale dlouho tam chyběla, takže jejich přesné znění by dal dohromady myslím málokdo. Z pravidel vyplývá a za zapamatování stojí, že max(max($pole)) nemusí nutně vrátit největší prvek pole, ale vrátí největší prvek pole, které je vyhodnoceno jako největší. Např. max(max(array(array(1, 2), array(0, 5)))) vrátí 2, protože array(1, 2) > array(0, 5).

Jakub Vrána, Výuka, 25.11.2005, diskuse: 2 (nové: 0)

Diskuse

kr4UT1k:

A když nebude pole obsahovat samé nezáporné hodnoty? Stačí pak toto?
<?php
if ( (max(max($pole)) == 0) && (max(max($pole)) == 0) ) {
    return; //tohle return bez niceho mi taky neni moc jasny, ale budiz
}
?>

ikona Jakub Vrána OpenID:

Asi jsi měl na mysli spíš min(min($pole)) == 0. Pak by to mělo stačit.

Samotný return způsobí ukončení funkce (nebo vloženého souboru, pokud je mimo funkci) bez předání návratové hodnoty (jako by se předala null).

Diskuse je zrušena z důvodu spamu.

avatar © 2005-2024 Jakub Vrána. Publikované texty můžete přetiskovat pouze se svolením autora. Ukázky kódu smíte používat s uvedením autora a URL tohoto webu bez dalších omezení Creative Commons. Můžeme si tykat. Skripty předpokládají nastavení: magic_quotes_gpc=Off, magic_quotes_runtime=Off, error_reporting=E_ALL & ~E_NOTICE a očekávají předchozí zavolání mysql_set_charset. Skripty by měly být funkční v PHP >= 4.3 a PHP >= 5.0.