2009-08-21 9 views
0

Ich habe die folgenden Arrays in PHP, dass ich eine user_id-Nummer speichern, um zu verfolgen, Moderator/Admins auf meiner Website, dann in einer Seite kann ich nur in_array() verwenden, um festzustellen, ob ein Benutzer Moderatorberechtigungen, ich Abbildung spart einige mysql-Abfragen, indem Sie stattdessen ein Array verwenden.Sollte ich mehrere PHP-Arrays kombinieren oder nicht?

Ich wundere mich, würde es einen Leistungsgewinn durch die Kombination dieser in 1 größere Array statt separate?

Wenn ja, könnten Sie ein Beispiel zeigen, wie ich sie kombinieren und verwenden kann?

Vielleicht einige Gründe für 1 Weg über den anderen auflisten?

$moderators = array(1,99,88,77,2,3,4,5); 
$bulletin_moderators = array(1,1091,13,103); 
$forum_moderators = array(1,1091,34850,13,103,21); 
$blog_moderators = array(1,1091,21); 
$photo_moderators = array(1,1091,13,34850,103,21); 
$chat_moderators = array(1,44534); 
+1

Hören Sie sich den Rat des Weisen über harte Codierung an. Vertrauen Sie uns, Sie möchten dies wirklich in einer Datenbank speichern. Es wird Ihr Leben auf lange Sicht VIEL einfacher machen. Denken Sie daran, dass viele von uns ähnliche Dinge getan haben und uns in den Arsch beißen. Wir hatten SO dann nicht. Du wurdest gewarnt. Viel Glück auf Ihrer App! :) –

Antwort

3

Leistungsgewinn? Nein. Wartbarkeitsgewinn? Bestimmt. Versuchen Sie dies:

$roles=array(
    'moderators'   => array(1,99,88,77,2,3,4,5), 
    'bulletin_moderators' => array(1,1091,13,103), 
    'forum_moderators' => array(1,1091,34850,13,103,21), 
    'blog_moderators'  => array(1,1091,21), 
    'photo_moderators' => array(1,1091,13,34850,103,21), 
    'chat_moderators'  => array(1,44534) 
); 

Wie das oben genannte Plakat sagte, sollten diese wirklich nicht fest codiert werden. Eine Datenbankabfrage würde nicht viel Zeit in Anspruch nehmen und würde wahrscheinlich im Speicher oder in der Datenbank selbst zwischengespeichert werden (vorausgesetzt, Sie verwenden mysql).

Was ist, wenn Sie weitere Benutzer hinzufügen? Sie müssten Ihre Quelle bearbeiten. Was wäre, wenn Sie mehrere Server hätten? Sie müssten Ihre Quelle auf X Serveranzahl bearbeiten.

+0

das ist, was ich gesucht habe, danke! – JasonDavis

6

Ich denke, das ist schon eine extreme Optimierung. Sofern Sie nicht einige Benchmarks haben, die eine eindeutige Notwendigkeit dafür aufzeigen, gibt es keinen Grund, die Rollen db-side nicht nur zu speichern und eine Abfrage durchzuführen. Es sollte nur einen winzigen Bruchteil einer Sekunde dauern.

+0

Ja, wenn Sie bereits den Benutzer gegen die db authentifizieren, dann wenn Sie die Benutzerrolle (n) dort speichern, dann können Sie es einfach zur gleichen Zeit greifen –

+0

Nicht nur sollten diese schnelle Abfragen sein, hart-Codierung sie Das macht es einfach unmöglich, ein Administrationswerkzeug zu schreiben, um Moderatoren hinzuzufügen oder zu entfernen. Wenn man in ein Muster wie dieses kommt, kann dies zu magischen Zahlen im gesamten Code führen, was ein Albtraum der Wartbarkeit ist. Sind Sie sicher, dass dies keine vorzeitige Optimierung ist? –

+0

Danke, aber das ist nicht wirklich hilfreich in meiner Situation. – JasonDavis

0

Es würde sicherlich keinen Leistungszuwachs geben, aber Sie sollten damit nicht zu sehr rechnen. So etwas hat einen sehr geringen Einfluss auf die Gesamtleistung der Seite.

Persönlich, anstatt alle diese Arrays zu verwalten, würde ich eine User Klasse erstellen, die alle Berechtigungen des Benutzers enthält. Überprüfe eine Funktion in dieser Klasse. Normalerweise werden Sie auch den Benutzernamen und andere Dinge über den Benutzer benötigen, und ein Benutzerobjekt ist eine gute Möglichkeit, all das zu konsolidieren.

Laden Sie alles, was Sie über den Benutzer wissen müssen, zu Beginn des Seitenladevorgangs, und speichern Sie sie in einer Sitzung, die Ihren Anforderungen entspricht.

+0

der Hauptgrund dafür ist nicht, einem Benutzer genau dort Erlaubnis zu zeigen, aber mehr, anderen Benutzern zu zeigen, welche Benutzer andere Erlaubnis haben, ist dieses eine große Weise, eine zusätzliche Abfrage zur DB zu verringern – JasonDavis

Verwandte Themen