Autor Zpráva
Hologos
Profil
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
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
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
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
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 *
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 *
Ještě menší oprava, v tom posledním řádku si místo 'referee' nahraď příslušný řádek - u tebe kategorie.
Hologos
Profil
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
Hologos:
Podívej se na funkci http://php.net/manual/en/function.array-multisort.php

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: