Autor Zpráva
aww
Profil *
Je nejaká možnosť, že sa dajú overiť zvolené čísla tak, či medzi nimi nie je "diera", a ide len o čísla v max. rozmedzí 1-7?
napr.
<?php
$Hodnoty1 = Array(1, 2, 3, 4, 5, 6, 7); // OK
$Hodnoty2 = Array(1, 2, 3); // OK
$Hodnoty3 = Array(1, 3, 4); // CHYBA! NEEXISTUJE "2"
$Hodnoty4 = Array(1, 4); // CHYBA! NEEXISTUJE "2" a "3"



Tu je kód, v JavaScripte, treba ho ale upraviť: http://stackoverflow.com/a/824445

skús aj toto: http://stackoverflow.com/questions/11385896/find-the-first-missing-number-in-a-sorted-list
1Pupik1989
Profil
Zkus array_diff
janbarasek
Profil
aww:
Je to úplně jednoduché. Stačí tu řadu čísel setřídit (třeba funkcí sort()) a pak projít pole, pokud nějaké číslo chybí, tak si ho poznamenáš do vedlejšího pole a uděláš další operace.

Pokud chceš jen zjistit, jestli chybí aspoň jedno číslo (a nezajímá tě jaké), tak stačí projít jen setříděné pole přes sekvenční vyhledávání a při první nalezené "díře" ukončit cykl a odeslat informaci, že tam není číslo.
Someone
Profil
Např.:
<?php

function check(array $pole) {

    $missing = array();

    for($a = min($pole);$a<max($pole);$a++) {
        if(!in_array($a,$pole)) $missing[] = $a;
    }

    return $missing;

}

$missing = check(array(1,4));
if(empty($missing)) {
    echo "OK";
} else {
    echo "Missing: " . implode(", ",$missing);
}

?>
Tori
Profil

if (count($pole) !== count(array_flip($pole))) { // některá hodnota se opakuje }
if (array_diff($pole, array_map('intval', $pole))) { // některá hodnota není číslo, anebo je zapsaná exponenciálně }

// a tohle asi hledáte: (pro obě následující podmínky je nutné to pole nejdřív seřadit funkcí sort)
sort($pole);
if (current($pole) < 1 || end($pole) > 7) { // pole obsahuje čísla z většího rozsahu než 1 až 7 }
if ($chybi = array_diff($pole, range(current($pole), end($pole)))) {
    echo 'chybi cisla '.implode(', ', $chybi);
}
(ale všechny tyhle údaje se dají zjistit naráz jedním průchodem pole. Zkoušela jsem spíš alternativy.)
1Pupik1989
Profil
To už jsem nestihl napsat. Vzal bych pole, z něho vybral maximální hodnotu. Pak vytvořil nový rozsah a porovnal. Čili jako Tori.

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