Autor Zpráva
happyy
Profil *
mám číslo třeba 35.

pak mám pole

array(15 => 'text1', 28 => 'text2', 68 => 'text3' atd

a teď bych chtěl vybrat z pole prvek s klíčem nejbližším nižším než je to číslo (takže v tomto případě prvek s klíčem 28)

napadá někoho jak to nějak slušně udělat?

předem diky
fajzen
Profil
Neviem, či to ide aj slušnejšie, ale malo by fungovať toto:
$pole = array(15 => 'text1', 28 => 'text2', 68 => 'text3');
$cislo = 35;
echo najdi_najblizsie($pole, $cislo);

function najdi_najblizsie($p, $c)
{
  for($i = $c; $i >= 0; $i--) {
    if(isset($p[$i]))
      return $p[$i];
  }

  return 'nenajdene'; // neexistuje mensi index
}
PostCC
Profil
Nevím, jestli je to slušnější, nicméně fajzen řešení:

1) nepočítá s písmennými nebo neceločíselnými indexy
2) zbytečně násobí počet cyklů a prodlužuje provedení funkce

Já bych to řešil takto:

$pole = array(15 => 'text1', 28 => 'text2', 68 => 'text3');
$cislo = 35;

Function FindLowerIndex($Pole, $Index) {
	$Klic = FALSE;
	KSort($Pole);
	While(Key($Pole) < $Index) {
		$Klic = Key($Pole);
		Next($Pole);
	}
	Return $Klic ? $Pole[$Klic] : FALSE;
}

Echo FindLowerIndex($pole, $cislo);


Tady cyklus proběhne pouze dvakrát a navíc je jedno, zda jde o číselné nebo alfanumerické indexy.
happyy
Profil *
PostCC:

diky moc - tohle je super! napadlo mě jen něco jak napsal fajzen a to bylo nepoužitelné.

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