Autor Zpráva
Jakubb
Profil *
$a = array('a' => array('bar' => 'aa', 'act' => 1, 'ber' => 8),
           'b' => array('bar' => 'bb', 'act' => 1, 'ber' => 8),
           'c' => array('bar' => 'cc', 'act' => 1, 'ber' => 7),
           'd' => array('bar' => 'dd', 'act' => 1, 'ber' => 1)
);
Ahoj, poradíte jak získat bez cyklu název klíče (c) když znám jen hodnotu (cc) prvku (bar) ? Děkuji
_es
Profil
Asi nijako.
Alphard
Profil
Mělo by jít použít funkce pro práci s poli přebírající callbackovou funkci, ale to byl cyklus jen o úroveň níž. Proč nechcete cyklus, nějaký úkol/soutěž/snaha o optimalizaci?
Jakubb
Profil *
Alphard:
Proč nechcete cyklus, nějaký úkol/soutěž/snaha o optimalizaci?
Ano, snaha o optimalizaci...
A nějaký rychlý cyklus poradíte? Díky
Alphard
Profil
Jakubb:
Ano, snaha o optimalizaci...
Jestli to pole nemá aspoň tisíc položek, ztrácíte čas na špatném místě.

foreach ($a as $k => $v)
{
  if ($v['bar'] == 'cc') return $k; // nebo break, nevím, jestli to bude ve funkci
}
_es
Profil
Jakubb:
Ak nechceš cyklus, tak si pozície prvkov podľa hodnôt ukladaj vopred do iného poľa. A čo ak bude hodnota 'cc' vo viacerých prvkoch?
Jakubb
Profil *
_es:
A čo ak bude hodnota 'cc' vo viacerých prvkoch?
Nebude, jedná se o unikátní hodnoty..


Alphard:
Díky, tak to je klasika výpis:-( Pole má cca 90 nastavených klíčů a každý z nich má cca 5 prvků + 5 jejich hodnot... Je to pořád málo?
Alphard
Profil
Jakubb [#7]:
Přístup ke konkrétnímu prvku v poli podle klíče je rychlý, otázka je, jak dlouhé jsou ty hodnoty, jak náročné je porovnání. To číslo 1000 jsem střelil od boku, samozřejmě záleží na návštěvnosti webu, výkonu serveru apod.
90 prvků hlavního pole se mi zdá ok, hlavní ale je, že toto je izolovaný problém, který lze snadno opravit i později, kdyby byly problémy.

Jak navrhuje [#6] _es, při vytváření tohoto pole by se mohlo vytvořit druhé jednoúrovňové pole, kde budou ty páry obráceně ('cc' => 'c'), nebo pokud již víte, co budete hledat (což byste snad reálně vědět mohl), můžete to hledat již při vytváření toho pole.

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