PHP 2 Arrays sortieren

Handymann

** Losedealer **
ID: 418952
L
27 August 2011
346
15
Hallo ,

Ich habe 2 Arrays die ich gern sortieren möchte.
Das sortieren an sich ist ja kein Problem , es müssen aber bei beiden Arrays die Arrayschlüssel wieder zu einander passen.

Kann mir einer einen Tipp geben ?
 
asort() ist schon rictig , ich habe aber 2 unterschiedliche Arrays wo die Schlüssel nach dem sortieren wieder passen müssen.

Beispiel

Array1 = 3,2,1,4,5

Array2 = Auto,Bus,Fahrrad,Bahn,Motorrad

Nach dem Sortieren

Array1 = 1,2,3,4,5

Array2 = Fahrad,Bus,Auto,Bahn,Motorrad
 
in dem Falle würde ich mit einem assoziativen Array arbeiten.
Alles andere wäre wohl Pfusch.
 
verwendet das Array gleiche Keys ? Dann sollte ein Übertrag auf ein a.Array per foreach-Schleife kein Problem sein
 
Hier der Code ,

Ich habe nicht so viel Ahnung von PHP und bin froh das ich das so hinbekommen habe.

PHP:
$empfang  = explode("#", $_POST['Auswahl1']);
$databox1 = explode(",", $empfang[0]);

    for ($i=0;$i<count($databox1);$i++){
     $weitergabe ="";
     $weitergabe = trim($databox1[$i]);
     
     $query="SELECT * FROM Einzelkompetenzen WHERE Id LIKE '".$weitergabe."' AND Showw LIKE '1'";
     $ergebnis=mysql_db_query($db,$query);  
       $row1 = mysql_fetch_object($ergebnis);
       $box2name[$i] = $row1->Name;
       $box2value[$i] = $row1->Zuordnung_BT;
    }

$box2name = array_filter($box2name); 
$box2name = array_values ( $box2name );

$box2value = array_filter($box2value); 
$box2value = array_values ( $box2value );

}
 
Habe mir es so gedacht , Arrays zu einem Array verbinden , sortieren und wieder trennen. Ist sowas möglich ?
Das ginge beispielsweise so:
PHP:
$temp = array_combine($array0, $array1);
ksort($temp);
$array0 = array_keys($temp);
$array1 = array_values($temp);
Aber wenn ich das richtig sehe, könnte man sich das in Deinem Code auch sparen, wenn Du das alles ein bisschen umstellst.

Momentan liest Du ja in einer Schleife jeden Eintrag einzeln aus und füllst damit zwei Arrays. Theoretisch könntest Du auch alles auf einmal auslesen und die Sortierung von MySQL machen lassen, dann sparst Du Dir diesen Zwischenschritt in PHP.

Folgendermassen:
PHP:
$empfang  = explode("#", $_POST['Auswahl1']);
$databox1 = explode(",", $empfang[0]);

$escaped = array_map('trim', $databox1);
$escaped = array_map('mysql_real_escape_string', $escaped);
$query = "SELECT * FROM Einzelkompetenzen WHERE Id IN (".implode(',', $escaped).") AND Showw = '1' ORDER BY Name ASC";

$box2name = $box2value = array();
$ergebnis=mysql_db_query($db,$query);  
while ($row = mysql_fetch_object($ergebnis)) {
       $box2name[] = $row->Name;
       $box2value[] = $row->Zuordnung_BT;
}
Hope that helps...
 
Zuletzt bearbeitet:
PHP:
while ($row = mysql_fetch_object($ergebnis)) {
       $box2name[$i] = $row->Name;
       $box2value[$i] = $row->Zuordnung_BT;
}

Irgendwo musst Du noch das $i immer um 1 erhöhen, oder geht das automatisch ?
Muss $i anfangs initialisiert werden ?

PHP:
$i = 0 ;
while ($row = mysql_fetch_object($ergebnis)) {
       $box2name[$i] = $row->Name;
       $box2value[$i] = $row->Zuordnung_BT;
       $i++ ;
}
 
Ich musste es jetzt mit dieser Lösung machen.
Da auf dem Server nur PHP4 installiert ist :-(

Dein anderer Vorschlag funktioniert leider nicht , hätte mir besser gefallen.
Aber da kommen immer SQL Fehler "keine Resourcen" u.s.w.
Liegt bestimmt an der alten PHP Version.



PHP:
<?php
function array_combine($arr1, $arr2) {
    $out = array();
   
    $arr1 = array_values($arr1);
    $arr2 = array_values($arr2);
   
    foreach($arr1 as $key1 => $value1) {
        $out[(string)$value1] = $arr2[$key1];
    }
   
    return $out;
}
?>

PHP:
$temp = array_combine($array0, $array1);
ksort($temp);
$array0 = array_keys($temp);
$array1 = array_values($temp);


Vielen dank nochmal an euch für die Unterstützung !