Autor | Zpráva | ||
---|---|---|---|
Hologos Profil |
#1 · Zasláno: 12. 7. 2010, 17:49:21 · Upravil/a: Hologos
Zdravím,
potřebuji dnes poradit ještě s jedním problémem. Chci si data z databáze uložit do vícerozměrného pole. Mělo by to vypadat nějak takhle. while($radek = mysql_fetch_array($result)) { $data[] = $radek; } // pole vypadá takto /* ** [0] => ['id'] = 1 ** ['kategorie'] = 5 ** ['nazev'] = 'AA'; ** [1] => ['id'] = 2 ** ['kategorie'] = 4 ** ['nazev'] = 'BB'; ** [2] => ['id'] = 3 ** ['kategorie'] = 5 ** ['nazev'] = 'CC'; ** ..... */ seradPole($data, array('kategorie', 'id')); // a výsledek by mělo být takovéto pole. /* ** [4] => [2] => ['nazev'] => 'BB' ** [5] => [1] => ['nazev'] => 'AA' ** [3] => ['nazev'] => 'CC' */ |
||
Joker Profil |
#2 · Zasláno: 12. 7. 2010, 17:59:48
Hologos:
Z tohohle a toho minulého dotazu mám pocit, že se snažíte řešit nějaký problém, který už má jiné a jednodušší řešení. Jinak by na to šla použít funkce uasort. A poznámka, podle toho příkladu v kódu by výsledek vypadal při použití mysql_fetch_assoc nebo mysql_fetch_array s druhým parametrem MYSQL_ASSOC. To co je v kódu napsané by mělo vyrobit: /* ** [0] => [0] = 1 ** [1] = 5 ** [2] = 'AA'; ** ['id'] = 1 ** ['kategorie'] = 5 ** ['nazev'] = 'AA'; ** [1] => [0] = 2 ** [1] = 4 ** [2] = 'BB'; ** ['id'] = 2 ** ['kategorie'] = 4 ** ['nazev'] = 'BB'; ** [2] => [0] = 3 ** [1] = 5 ** [2] = 'CC'; ** ['id'] = 3 ** ['kategorie'] = 5 ** ['nazev'] = 'CC'; ** ..... */ |
||
Hologos Profil |
#3 · Zasláno: 12. 7. 2010, 18:03:01 · Upravil/a: Hologos
Nepochopil jsi to správně. Je to sice vícerozměrné pole (z té funkce mysql_fetch_**), ale indexováno od 0.
Mně jde o to, aby to indexování bylo podle těch parametrů v té funkci, tedy nejdříve podle kategorie, pak podle id. Když se koukneš, tak to pole je indexováno od 4rky a 5tka je dokonce další vícerozměrné pole, které obsahuje 2 prvky (se stejnou kategorií). |
||
Joker Profil |
#4 · Zasláno: 12. 7. 2010, 18:22:58
Hologos:
Joaha, tak to uasort asi stačit nebude. No tak napsat funkci, která jako vstup bude mít tohle pole, celé ho projde a přitom vytvoří to nové pole a to pak vrátí. V souvislosti s tím předchozím dotazem mi to ale stále zavání chybou v návrhu. Výběry, filtrování, řazení a seskupování potřebných dat by měla dělat databáze, čili taková funkce seradPole by vůbec neměla být potřeba. |
||
Hologos Profil |
#5 · Zasláno: 12. 7. 2010, 18:31:06
Mně jde právě o to, že mi to pole nejde vytvořit..
Pokud je ten parametr řazení jen jeden, tak je to v pohodě, ale končím u toho, pokud jich je 2 a více. |
||
marcus33cz Profil * |
#6 · Zasláno: 12. 7. 2010, 18:35:57
Ahoj, nevím, jak přesně vypadá tvoje funkce seradPole, ale já osobně bych to řazení dělal už v databázi (když se v ní už vykonává dotaz, tak bych to nemíchal s PHP). I když je tady otázka výkon × přehlednost.
$result=mysql_query("SELECT * FROM tabulka ORDER BY kategorie ASC, id ASC"); # vidíš tady řadíš v mysql podle dvou parametrů, samozřejmě na to jde i funkce array_multisort, ale to je takový kanón na komára Toto je kompletní dotaz do databáze plus seřazení: while($radek[]=mysql_fetch_assoc($result)) {} #print_r($radek); $c=count($radek)-1; print_r_tree($radek); for($i=0;$i<$c;$i++) {$vysledek[$radek[$i]['referee']][$radek[$i]['id']]=$radek[$i];} Na první pohled to vypadá složitě (obzvlášť ten poslední řádek heh), ale vrátí ti to array přesně takovou, jakou potřebuješ. ;-) Funkčnost mám ověřenou, jednou jsem to použil. |
||
marcus33cz Profil * |
#7 · Zasláno: 12. 7. 2010, 18:37:48
Ještě menší oprava, v tom posledním řádku si místo 'referee' nahraď příslušný řádek - u tebe kategorie.
|
||
Hologos Profil |
#8 · Zasláno: 12. 7. 2010, 19:53:16
Vy mě ale furt nechápete..
Udělat skript, který udělá 2 rozměrné pole je hračka.. Ale mně jde o to, že ta hloubka bude proměnlivá + i ty sloupce, podle který se řadí, se budou měnit. Hledám nějaké universální řešení. |
||
Kcko Profil |
#9 · Zasláno: 12. 7. 2010, 20:20:07
Hologos:
Podívej se na funkci http://php.net/manual/en/function.array-multisort.php |
||
Časová prodleva: 14 let
|
0