Multi-Array erstellten & sortieren

ronin

Erfahrenes Mitglied
Hallo zusammen, SMEE again! :-)



Es geht um folgendes.
Ich lese eine Datei per "file()" in eine Variable. Diese muß ich zeilenweise anhand des Trenners "|" exploden. Daraus ergibt sich ja wieder ein Array.
Nun will ich aus diesem neuen Array ein zweidimensionales Array erstellen und dieses anhand des ersten Wertes sortieren.

Das Array von file():
PHP:
1|blau
7|rot
4|gelb
9|lila

nun wird exploded in die Variable test:
PHP:
erster Durchgang:
$test[0] = 1;
$test[1] = blau;

zweiter Durchgang:
$test[0] = 7;
$test[1] = rot;


Ich möchte nun innerhalb dieser Schleife, in der mir die einzelnen Zeilen explodet werden, den Kram von "$test" das 2-dimensionale Array füllen.


Wie könnte ich das machen?

Mein Code bisher:
PHP:
$inhalt  = file("data/".$tage[$day][0].".txt");
$anzahl  = count($inhalt);
for ($i = 0; $i < $anzahl; $i++){
  $inhalt[$i]    = str_replace("\n", "", $inhalt[$i]);
  $copy          = explode("|", $inhalt[$i], 2);
  $new_array[$i] = array("$copy[0]", "$copy[1]");
}



Danke für eure Hilfe. :)
Grüße, Ronin
 
PHP:
<?
$lines = file("blablubb.txt");

// neues array erstellen
foreach ($lines as $line) {
	list($nr, $value) = explode("|", $line);
	$data[$nr] = trim($value);
}

// nach keys sortieren
ksort($data);

// ausgabe des sortieren arrays
foreach ($data as $nr => $value) {
	echo $nr.": ".$value."<br>\n";
}
?>

HTH :)
 
Also ...

fast ok.


PHP:
foreach ($lines as $line) {
    list($nr, $value) = explode("|", $line);
    $data[$nr] = trim($value);
}
$nr ist kein Index. $nr ist eine Zählvariable und die kann und wird innerhalb der Datei mehrfach vorkommen.
Einen Index $i mitlaufen zu lassen ist kein Problem. Ich habe Schwierigkeiten $nr und $value als zweidimensionales Array laufen zu lassen und später nach $nr zu sortieren.


WTF ist HTH??? :-)


Grüße, Ronin
(Schonmal danke sagt)
 
Hm... ich versteh jetzt nicht ganz, wo dein Problem liegt...? Variablen, die dir davonlaufen? ;) Beschreib mal genauer, warum und inwiefern du mit dem Code nicht klarkommst.

(HTH = hope that helps)
 
Aus einer Textdatei hole ich den gesamten Inhalt per file(). Nun gehe ich Zeile für Zeile durch und explode den Inhalt anhand des Trenners "|". Daraus ergibt sich ein normales Array mit 2 Feldern.

Im ersten Feld steht eine positive Ganzzahl. ;)
Im zweiten Feld steht eine URL.

Jetzt nehmen wir an, ich habe die obigen Variablen mehrmals. Also möchte ich alle, in der for-schleife ausgelesenen und erstellen, Arrays zu einem zusammenfassen.
PHP:
----[0] [1]
-----------
[0]  1   http://www.test.de
[1]  8   http://www.blubber.de
[2] 27   http://www.muggel.de
[3]  1   http://www.tutorials.de

$multi[2][1] ist dann: http://www.muggel.de

Ich möchte ein großes Array $multi erstellen und dann sortieren lassen. Wird $multi jetzt sortiert (nach den Zahlen, größte zuerst), sollte es so aussehen.

PHP:
----[0] [1]
-----------
[0] 27   http://www.muggel.de
[1]  8   http://www.blubber.de
[2]  1   http://www.test.de
[3]  1   http://www.tutorials.de

$multi[2][1] ist dann: http://www.test.de

Versteht jemand mein Problem? Ich male auch Bilder wenn es sein muß. :-)


Grüße und Danke, Ronin
 
Zuletzt bearbeitet:
Jetzt versteh ich's auch :)

Konnte ja nicht wissen, dass die Zahl am Zeilenanfang kein eindeutiger Index sondern eine Zählvariable ist :)

Ich hab jetzt zwar eine Lösung parat, allerdings entspricht sie nicht ganz deiner Vorgabe. Der Unterschied ist nur, dass bei meiner Arraystruktur Spalten und Zeilen vertauscht sind. Soll heißen in $multi[0] stehen die positiven Ganzzahlen und in $multi[1] die URLs. Andersfalls könnte man die praktische Funktion array_multisort() nicht verwenden. Man könnte zwar auch mit deiner Arraystruktur sortieren, aber das wäre aufwendiger. Aber genug der Vorrede, hier mal ein Beispielcode:
PHP:
<?
$lines = file("blablubb.txt");

$multi = array();

// neues array erstellen
foreach ($lines as $line) {
	$line = trim($line);
	list($nr, $url) = explode("|", $line);
	$multi[0][] = $nr;
	$multi[1][] = $url;
}

array_multisort($multi[0], SORT_DESC, SORT_NUMERIC,
                $multi[1]);

for ($i=0; $i<count($multi[0]); $i++) {
	echo $multi[0][$i].": ".$multi[1][$i]."\n";
}
?>

Hoffe mal du kommst damit klar :)
 
Hey korrekt! Danke schön!!

Ich habe aber nochwas festgestellt.
Innerhalb einer echo-Anweisung konnte ich ja bisher eine Variable ansprechen.
siehe:
PHP:
echo "Dies ist Test-No. $nummmer";
Daher kam nämlich auch einer meiner Fehler. :)


Bei dem multi-Array geht das nicht, sondern es muß lauten:
PHP:
echo "Dies ist Test-No. ".$nummer[0][1]." - Toll, oder?";

Anders ist die Variable nicht anzusprechen.



Danke und Grüße, Ronin
 
Zurück