URL: https://www.overclockers.at/coding-stuff/php_denkfehler_arrays_156000/page_1 - zur Vollversion wechseln!
Also ich habe in meiner Datenbank eine Tabelle mit den Speisenkategorien und in einer zweiten Tabelle alle Unterkategorien
Layout
(categories)
Code:+--------------+----------------+ | categoriesID | categoriesName | +--------------+----------------+ | 1 | Vorspeisen | | 2 | Hauptspeisen | | 3 | Nachspeisen | | 4 | Getränke | | 5 | Sonstiges | +--------------+----------------+
Code:+----------+-------------+-----------+ | subcatID | subcatName | subcatRef | +----------+-------------+-----------+ | 1 | Suppen | 1 | | 2 | Sonstiges | 1 | | 3 | Aufläufe | 2 | | 4 | Fisch | 2 | | 5 | Fleisch | 2 | | 6 | Sonstiges | 2 | | 7 | Süßes | 3 | | 8 | Pikantes | 3 | | 9 | Cocktails | 4 | | 10 | Shakes | 4 | | 11 | Fruchtsäfte | 4 | | 12 | Aufstriche | 5 | | 13 | Salate | 5 | +----------+-------------+-----------+
Code: PHP/* Stoebern.php -- Durchsuchen nach Kategorien */ /* Auslesen der Kategorien und der Subkategorien*/ $mysqlQuery = "SELECT * FROM ok_categories ORDER BY categoriesID ASC"; $mysqlResult = mysql_query($mysqlQuery); while($actualRow = mysql_fetch_array($mysqlResult)) { $catArray[$actualRow['categoriesID']] = $actualRow['categoriesName']; $mysqlSubQuery = "SELECT * FROM ok_subcat WHERE subcatRef = '".$actualRow['categoriesID']."'"; $mysqlSubResult = mysql_query($mysqlSubQuery); while($actualSubRow = mysql_fetch_array($mysqlSubResult)) { $catArray[$actualRow['categoriesID']]['subName'] = $actualSubRow['subcatName']; } } echo "<pre>"; print_r($catArray); echo "</pre>";
Code:Array ( [1] => Sorspeisen [2] => Sauptspeisen [3] => Pachspeisen [4] => Fetränke [5] => Sonstiges )

edit: del, wegen blödheit 
hab nicht gesehen, dass subcatref dein fk ist...
edit2:
wozu die einfachen hochkommata beim where? ist doch ein int, oder?`Code: PHP$mysqlSubQuery = "SELECT * FROM ok_subcat WHERE subcatRef = '".$actualRow['categoriesID']."'";
Code: PHPwhile($actualSubRow = mysql_fetch_array($mysqlSubResult)) { $catArray[$actualRow['categoriesID']]['subName' ] = $actualSubRow['subcatName'];
Also du hast da wirklich einen Denkfehler, bzw. weißt du nicht, was du eigentlich machen willst. Du willst, soweit ich das verstanden habe, ein 2-dimensionales assoziatives Array, in dem die Werte der Unterkategorien drinstehen. Warum du dazu (Anzahl Hauptkategorien + 1) Queries benutzt, wo es auch mit einem gehen würde, ist mir dabei nicht ganz klar. Auch nicht, wie dein Array aussehen soll.
Also bis jetzt machst du dein erstes Query und schreibst dann in $catArray[1] = "Vorspeisen". Dann später willst du $catArray[1]['subName'] = "Suppen"; zuweisen. Da aber $catArray[1] ein String ist, wird 'subName' numerisch zu 0 ausgewertet und $catArray[1][0], also dem jeweils ersten Buchstaben der Wert vom subCatName zugewiesen.
Imho wärs besser, wenn du das catArray ca. so aussehen lässt: $catArray['Vorspeisen'][0] = 'Suppen';
Dazu kannst du aber auch einfach 1 Query verwenden, das jetzt (ungetestet) ca. so aussehen sollte:
hthCode:SELECT categoriesName, subcatName FROM subcat LEFT JOIN categories ON subcatRef=categoriesID ORDER BY categoriesID, subcatName
Zitat von gueAlso du hast da wirklich einen Denkfehler, bzw. weißt du nicht, was du eigentlich machen willst. Du willst, soweit ich das verstanden habe, ein 2-dimensionales assoziatives Array, in dem die Werte der Unterkategorien drinstehen. Warum du dazu (Anzahl Hauptkategorien + 1) Queries benutzt, wo es auch mit einem gehen würde, ist mir dabei nicht ganz klar. Auch nicht, wie dein Array aussehen soll.
Also bis jetzt machst du dein erstes Query und schreibst dann in $catArray[1] = "Vorspeisen". Dann später willst du $catArray[1]['subName'] = "Suppen"; zuweisen. Da aber $catArray[1] ein String ist, wird 'subName' numerisch zu 0 ausgewertet und $catArray[1][0], also dem jeweils ersten Buchstaben der Wert vom subCatName zugewiesen.
Imho wärs besser, wenn du das catArray ca. so aussehen lässt: $catArray['Vorspeisen'][0] = 'Suppen';
Dazu kannst du aber auch einfach 1 Query verwenden, das jetzt (ungetestet) ca. so aussehen sollte:hthCode:SELECT categoriesName, subcatName FROM subcat LEFT JOIN categories ON subcatRef=categoriesID ORDER BY categoriesID, subcatName
Damit der post ned zu unübersichtlich wird, hier jetzt:
Hab deine Idee jetzt mal verwirklicht und das schaut nicht so schlecht aus:
Code: PHP$mysqlQuery = "SELECT categoriesName, subcatName FROM ok_subcat LEFT JOIN ok_categories ON subcatRef = categoriesID ORDER BY categoriesID, subcatName ASC"; $mysqlResult = mysql_query($mysqlQuery); while($row = mysql_fetch_array($mysqlResult)) { $catArray[$row['categoriesName']][] = $row['subcatName']; } echo "<pre>"; print_r($catArray); echo "</pre>";
Code:Array ( [Vorspeisen] => Array ( [0] => Sonstiges [1] => Suppen ) [Hauptspeisen] => Array ( [0] => Aufläufe [1] => Fisch [2] => Fleisch [3] => Sonstiges ) [Nachspeisen] => Array ( [0] => Pikantes [1] => Süßes ) [Getränke] => Array ( [0] => Cocktails [1] => Fruchtsäfte [2] => Shakes ) [Sonstiges] => Array ( [0] => Aufstriche [1] => Salate ) )
Das ganze ist natürlich nicht besonders sauber. Idealerweise würdest du das ganze mit Objekten machen.Code: PHP{foreach from=$cat key=catname item=subcat} <b>{$catname}</b><br> {foreach from=$subcat item=subcatname} {$subcatname} {/foreach} <br> {/foreach}
w00t es funktioniert!
großes Dankeschön!
wieder was gelernt 
overclockers.at v4.thecommunity
© all rights reserved by overclockers.at 2000-2026