Autor Zpráva
Darker
Profil
Mějme pole, jehož kladné celočíselné klíče nemusí začínat nulou a není mezi nimi žádná pravidelnost. Chci polem procházet. Napadla mě tahle koncepce:
$posledni_klic=0;
for($i=0;$i<$POCET_KLICU;$i++){
  while(!isset($pole[$posledni_klic]))
   $posledni_klic++;
  //neco delame s $pole[$posledni_klic]
}

Pokud nechám stranou nejistotu stran nějakého nekonečného loopu, tak se mi to zdá neefektivní. Doufám že se pletu, co vy na to?
Nepoužil jsem sekci PHP jelikož mě zajímá i případné obecné řešení, nicméně problém řeším v PHP.
__construct
Profil
Darker:
V PHP je na také veci konštrukcia foreach ($array as $key => $value), ale môžeš použiť aj objektový prístup pomocou Iterátoru
Darker
Profil
Zapoměl jsem dodat, že mi záleží na procházení od nejmenšího k největšímu, proto mě napadlo použití while, který klíč zvětšije pojednom, dokud se nestrefí do existující hodnoty.
Edit:
Vlastně by mi bohatě stačilo seřadit asociativní pole podle jedné z jeho podhodnot.
Mohu mít :
array(
  1526 => "něco",
  456  => "něco",
  15648 =>"něco",
)

nebo
array (
  1 => array('ble'=>1526),
  2 => array('ble'=>456),
  3 => array('ble'=>15648),
)

A kýžený výsledek je
array (
  1 => array('ble'=>456),
  2 => array('ble'=>1526),
  3 => array('ble'=>15648),
)
panther
Profil
Darker:
určitě správným řešením je foreach, pokud chceš/potřebuješ procházet od nejmenšího, nejprve si pole seřaď.
Darker
Profil
panther:
nejprve si pole seřaď.
Darker:
Vlastně by mi bohatě stačilo seřadit pole

Souhlasím. A jak to mám, prosím, provést?
__construct
Profil
Darker:
A jak to mám, prosím, provést?
Záleží na tom čo (aký typ bude kľúč) chceš radiť — v tom prvom prípade by stačila funkcia sort(). Pokiaľ ale chceš zoraďovať asociatívne pole podľa obsahu a nie kľúčov (prípad č. 2) riešenie bude zložitejšie.
Darker
Profil
__construct:
riešenie bude zložitejšie.
Obávám se, že máš pravdu.
Ale data tahám z databáze a čísla jsou primary_key, nejde to řadit tam (primary key nemá "auto iterate")?
joe
Profil
Darker:
primary key nemá "auto iterate"
zřejmě myslíš auto increment

seřadit v databázi samozřejmě můžeš - ORDER BY id
__construct
Profil
Darker:
data tahám z databáze
Si si istý, že sa nedá zostaviť dotaz, tak aby boli výsledné dáta zoradené podľa potreby?
Darker
Profil
__construct:
Si si istý, že sa nedá zostaviť dotaz
Ne, nejsem. Databáze ovládám dost povrchně, zatím jsem ve fázi upravování zkopírovaných příkladů.

Problém jsem ale už vyřešil. Asciativní pole jsem vytvoříl tak, aby jeho klíči byly hlavní klíče z DB, pak sem použil sort a foreach.
Také dík za joeovo ORDER BY, myslím že se mi to ještě bude hodit.

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0