(Hallo|Hi|Howdy) ordinary,
Es handelt sich um ein Tool, mit dem man URLs überprüfen kann, und diese werden dann in ein Mail geschrieben und an denjenigen gesendet, der die Anfrage gestellt hat:
Ich sollte die Links nach deren Fehlermeldungen sortieren (z.B.Status: HTTP/1.1 404 Object Not Found).und nun das Problem, mit dem ich Schwierigkeiten habe:
$alle_links[0]["url"] = $url; //Hier wird URL eingegeben, die überprüft werden soll
$alle_links[0]["status"] = ""; //Hier kommt die Fehlermeldung rein
> Weiter unten im Code ist das:
> ~~~php
> // Hier ein Case der die verschiedenen Statusmeldungen abfängt
> $status_code_teile = split(" ", $alle_links[$index]["status"]);
> switch($status_code_teile[1])
> {
> case 200: // HTTP/1.1 200 OK
> $ok++;
>
usw.
Die folgende Codezeile kommt dann im Mail, am Schluss wird der Link eingefügt.
if($status_code_teile[1] != 200){
$problem_links[] = "Die Page: ".$alle_links[$index]["parent"]."\nverweist auf: ".$alle_links[$index]["url"]."\nStatus: ".$alle_links[$index]["status"];
}
$index++;
>
> Und jetzt: Man kann die fehlenden Links zählen, mit ` count(); `{:.language-php}, jedoch eben nicht sortieren! Einmal hat es auch sortiert, aber ich weiss nicht genau nach was, wahrscheinlich nach dem Index und nicht nach dem Status...
> Bitte bitte helft mir.. Ich steh etwas unter Zeitdruck : (
Jaaa, das ist natürlich ein schlagendes Argument! ;-)
Es wäre außerordentlich interessant, zu wissen, welche Variable du count() übergeben hast. Die gleiche ist wahrscheinlich auch die, die sortiert werden muss. Leider hast du sie nicht explizit erwähnt. Ich vermute mal, dass es sich um $alle\_links handelt. Das ist (auch so eine Vermutung) ein dickes, mehrfach verschachteltes [Array](http://php.net/manual/de/book.array.php).
Wenn man so ein verschachteltes Array nach einem Kriterium sortieren möchte, dass nicht von den Standard-Array-Sortierfunktionen abgedeckt wird, dann muss man [usort()](http://php.net/manual/de/function.usort.php) oder einen seiner Kumpels wie uksort() usw. zu Hilfe nehmen. Der Funktion usort() übergibst du zwei Argumente:
1\.) Das zu sortierende Array (logisch!)
2\.) Den Namen einer Vergleichsfunktion.
Die Vergleichsfunktion entscheidet, nach welchem Untereintrag in $alle\_links sortiert werden soll.
Da ich zu faul bin, mir aus deinen Code-Teilstücken jetzt den passenden Eintrag herauszupulen (wenn er überhaupt vorhanden ist), solltest du folgendes in dein Script einbauen:
~~~php
// die Vergleichsfunktion (nur zum Testen):
function vergleich($a, $b) {
echo '<pre>';
ob_start();
var_dump($a);
echo htmlspecialchars(ob_get_clean());
echo '</pre>';
exit();
}
// ...
// die Stelle in deinem Script, an der du die Sortierfunktion einbauen wolltest
usort($alle_links, 'vergleich');
Das gilt für den Fall, dass die Ausgabe des PHP-Scripts als HTML im Webbrowser landet.
Falls eine Textausgabe genügt, kann vergleich() gekürzt werden:
function vergleich($a, $b) {
var_dump($a);
exit();
}
Das zeigt dir an, was die noch zu schreibende echte Vergleichsfunktion sieht. Irgendein Eintrag in diesem (sicher ebenfalls verschachtelten) Array $a, muss mit dem korrespondierenden Eintrag im Array $b verglichen werden. Dafür gibt es (je nach Datentyp) verschiedene Vergleichsfunktionen oder -operatoren in PHP.
Liebe Grüsse
Sandy
MffG
SpongeBob^WEisFuX