3Danke
ERLEDIGT
JA
JA
ANTWORTEN
8
8
ZUGRIFFE
340
340
EMPFEHLEN
-
04.12.11 13:37 #1
Hallöle,
Ich habe ein kleines Problem mit einem mehrdimensionalen Array.
Ich hatte das Array die ganze Zeit von Hand befüllt da sah es so aus:
geprüft habe ich es mitPHP-Code:$whitelist = array("seite1"=>"directory1", "seite2"=>"directory2", usw....");
so jetzt mein Problem, ich fülle das Array jetzt aus der Datenbank in einer while Schleife:PHP-Code:if(isset($whitelist["$seite"])) { tu was }
wie Prüfe ich es hier aber ?PHP-Code:$whitelist = array($items["seite"] => $items["directory"]);
funktioniert hier nicht.PHP-Code:if(isset($whitelist["$seite"])) { tu was }
-
04.12.11 13:50 #2
- Registriert seit
- May 2006
- Ort
- There is no place like 127.0.0.1
- Beiträge
- 3.521
Mach doch mal ein
nach dem du das Array mit den Items aus der Datenbank befüllt hast.PHP-Code:var_dump($whitelist);
Grüße
--
Qualität des Codes wird in WTF's/Min gemessen: Je mehr, desto schlechter der Code ;-)
-
04.12.11 14:23 #3
Habs schon hinbekommen

Hab das Array jetzt so gefüllt:
Danach konnte ich es ganz einfach per foreach auslesen und vergleichen:PHP-Code:$whitelist[$items["seite"]] = $items["directory"];
Ist es eigentlich sinnvoll beim Seiteninclude mit foreach zu arbeiten ? oder leidet die PerformancePHP-Code:foreach($whitelist as $seite => $directory) {
if ($page == $seite) {
echo $directory;
}
}
-
04.12.11 14:25 #4
- Registriert seit
- May 2006
- Ort
- There is no place like 127.0.0.1
- Beiträge
- 3.521
Naja, eigentlich wäre ein foreach nicht notwendig, wenn das Array so aufgebaut ist, das man mit isset() prüfen kann. Daher auch mein Hinweis mit var_dump(). Womöglich befüllst du das Array einfach nicht so, das man mittels isset() einfach prüfen kann.
Grüße
--
Qualität des Codes wird in WTF's/Min gemessen: Je mehr, desto schlechter der Code ;-)
-
04.12.11 15:35 #5
Das foreach ist ja nur für das auslesen des Arrays zum Includen, nicht zur Prüfung.
So sieht das im ganzen aus:
Und das Array sieht so aus:PHP-Code:if (isset($page) && isset($whitelist["$page"])) { // Wenn Seite gesetzt und das Array der Seite entspricht gehts weiter
foreach($whitelist as $link => $directory) {
if ($page == $link) { // wenn aktuelle Seite gleich der Seite in der Whitelist
$file = "./" .$directory. "/" .$link. ".php"; // Pfad der zu inkludierenden Seite in $file speichern
if(file_exists($file)) { include_once $file; }else{ include_once "./content/fehler.php"; } // Wenn Datei existiert Seite includieren, wenn nicht Fehlerseite aufrufen.
}
}
}else{ // Wenn $page nicht gesetzt oder Whitelist mit $page nicht übereinstimmt dann Fehlerseite aufrufen
if(file_exists("./content/fehler.php")) { include_once "./content/fehler.php"; }else{ die ("Schwerer Fehler aufgetreten"); }
}
Demnach habe ich immer meinen Ordner zu meiner passenden Seite.PHP-Code:$whitelist = array("seite1"=>"directory1", "seite2"=>"directory2", usw....");
-
04.12.11 16:28 #6
- Registriert seit
- May 2006
- Ort
- There is no place like 127.0.0.1
- Beiträge
- 3.521
Dann sollte es doch so etwas schneller gehen:
Code php:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
<?php // Wird mehrmals verwendet define("ERROR_PAGE", "./content/fehler.php"); // Seite aus dem GET-Parameter page holen $page = isset($_GET['page']) ? $_GET['page'] : ''; // White-List für die Directories $whitelist = array("seite1"=>"directory1", "seite2"=>"directory2"); // Vorinitialisierung $file = ERROR_PAGE; // Haben wir eine Seite im GET-Parameter und existiert die Seite in der White-List? if (isset($page) && isset($whitelist["$page"])) { // Wenn Seite gesetzt und das Array der Seite entspricht gehts weiter $file = "./" .$whitelist["$page"]. "/" .$page. ".php"; // Pfad der zu inkludierenden Seite in $file speichern } // Nur zum Debuggen //echo $file; // Existiert die Datei? if(!file_exists($file)) $file = ERROR_PAGE; // Datei einbinden... include_once $file;
Also das foreach wird nicht benötigt.Grüße
--
Qualität des Codes wird in WTF's/Min gemessen: Je mehr, desto schlechter der Code ;-)
-
04.12.11 16:44 #7
Noch zwei rein stilistische Anmerkungen:
- isset($page) im IF wird nicht benötigt, da $page immer gesetzt wird, entweder mit $_GET['page'] oder einem leeren String.
- Bei den ["$page"] kann man die Anführungsstriche ganz weglassen.
mfg ComFreek
Falls ich dir geholfen habe, würde ich mich über ein DANKE freuen!
Kenn mich am besten aus in C++, WEB-Sprachen (PHP, HTML, JavaScript) und vllt. mehr
[PHP] Überprüfen, ob Website erreichbar • Sicherheit in PHP-Codes schaffen • Google Chrome-Extension für tutorials.de • json_compress()
- isset($page) im IF wird nicht benötigt, da $page immer gesetzt wird, entweder mit $_GET['page'] oder einem leeren String.
-
04.12.11 16:50 #8
- Registriert seit
- May 2006
- Ort
- There is no place like 127.0.0.1
- Beiträge
- 3.521
Richtig, das isset() ist da evtl. nicht ganz geschickt. Besser wäre empty():
Code php:1 2 3
$set = ''; echo !empty($set) ? '$set ist gefüllt' : '$set ist nicht gefüllt';
Oder man initialisiert es mit null vor:
Code php:1 2 3
$set = null; echo isset($set) ? '$set ist gesetzt' : '$set ist nicht gesetzt';
Edit: Das kann ich ja jetzt gar nicht glauben: Die Prüfung, ob ein Element im Array vorkommt, geht teilweise schneller, als die Prüfung, ob eine Variable gesetzt ist oder nicht... Folgender Code:
Code php:
Ergebnis:
Code :1 2 3 4 5 6 7
Testlauf 1: isset($page)-Pruefung dauert 0.0000090599 isset($whitelist[$page])-Pruefung dauert 0.0000081062 Testlauf 2: isset($page)-Pruefung dauert 0.0000028610 isset($whitelist[$page])-Pruefung dauert 0.0000030994
Hat da jemand eine Erklärung für? Hat mich jetzt einfach mal interessiert, das Ergebnis hätte ich so aber nicht erwartet.
EDIT2: Erklärung für mich selbst: Intern bildet PHP alles, was sich im Speicher befindet, als Hash-Table-Element ab. Daher kann es auch vorkommen, das eine isset-Prüfung auf ein Array-Element schneller, genauso schnell oder langsamer ist als die Prüfung einer regulären Variable.Geändert von saftmeister (04.12.11 um 17:06 Uhr)
Grüße
--
Qualität des Codes wird in WTF's/Min gemessen: Je mehr, desto schlechter der Code ;-)
-
04.12.11 18:26 #9
Ich hab das foreach jetzt auch wieder rausgenommen. Vielen Dank für die Infos
Ähnliche Themen
-
Mehrdimensionales Array sortieren - Problem mit Internet Explorer
Von deb_ugger im Forum Javascript & AjaxAntworten: 1Letzter Beitrag: 29.01.11, 19:32 -
Mehrdimensionales Array - zu - Eindimensionales Array (Mehrheit gewinnt)?
Von Blaafer im Forum PHPAntworten: 2Letzter Beitrag: 25.12.08, 07:07 -
Problem: Mehrdimensionales Array
Von Elmo im Forum PHPAntworten: 1Letzter Beitrag: 18.11.08, 22:44 -
Mehrdimensionales Array zum einfachen Array imploden
Von Papenburger im Forum PHPAntworten: 5Letzter Beitrag: 30.04.07, 15:03 -
mehrdimensionales Array lösch Problem in DBM
Von Krypthonas im Forum PHPAntworten: 0Letzter Beitrag: 30.04.03, 19:53





Zitieren


Login






[PHP][Snippet] Array zu XML konvertieren