Übrigens funktioniert der split einwandfrei, werde aber trotzdem Deinen VOrschlag befolgen und explode bzw. fgetcsv testen!
Es funktioniert immer alles einwandfrei, bis plötzlich etwas daherkommt, was man nicht bedacht hatte. Windows funktioniert auch einwandfrei ... und hat jede Menge Sicherheitslücken. Nein! Nein! Stopp! Aufhören! Ich wollte jetzt dazu keine Diskussion anzetteln. :-)
Ich denke, jetzt hab ich dein Problem verstanden.
Zu den ersten ... Punkten
Ich ersetze erstmal das $filehash = array(); durch ein $kategorien = array();
Bezeichne deine Variablen am besten immer nach deren Bedeutung, nicht nach deren Typ.
Wenn du deinen Programm-Code später mal wieder anschaust siehst du an der Initialisierung, dass das ein Hash/Array ist, aber ob du dich dann noch an die Bedeutung erinnern kannst ...
$kategorien[$data[0]] = array('path' => $data[1], 'sort' => $data[2]);
cat_id brauchst du kein zweites Mal als Wert in $kategorien, das hast du ja schon als Key verwendet.
Dann hast du ein Array mit Datensätzen aus der DB:
foreach($results as $result) {
if (($result->category_id, $kategorien))
continue; // oder was weiß ich...
// als Beispiel eine Nur-Lesen-Anwendung
echo $kategorien[$result->category_id]['path'];
echo $kategorien[$result->category_id]['sort'];
}
$result ist an dieser Stelle nur eine Kopie, die am Ende des Schleifendurchgangs wieder verworfen wird. (Allgemein gesagt: foreach arbeitet immer nur mit Kopien der Elemente.) Wenn du also an die Elemente in $results noch Daten hinzufügen oder diese ändern willst, musst du sie direkt ansprechen:
foreach($results as $key => $result) {
if (!array_key_exists($result->category_id, $kategorien))
continue; // oder was weiß ich...
$results[$key]->path = $kategorien[$result->category_id]['path'];
$results[$key]->sort = $kategorien[$result->category_id]['sort'];
}
Das Sortieren geht dann so:
function cmp($a, $b) {
return $a->sort - $b->sort;
// oder so, wenn die höheren Werte vorn stehen sollen:
//return $b->sort - $a->sort;
}
usort($results, 'cmp');