2016-10-09 4 views
0

Ich versuche, ein Skript zu erstellen, die Benutzer aus einer db-Tabelle herunterladen und eine neue zufällige IP jedem Benutzer basierend auf seinem Status anhängen wird.Minimieren Sie Bemühungen mit Foreach

Das Problem ist, dass ich eine Menge Code geschrieben habe und es immer noch viel Copy/Paste Job gibt, wenn ich es mit diesem Ansatz behalte.

Kann mir jemand auf die richtige Richtung zeigen, wie man das richtig macht?

Also zuerst habe ich 50 davon:

$California_Text = file_get_contents('state/California.txt'); 
$California_textArray = explode("\n", $California_Text); 
$Idaho_Text = file_get_contents('state/Idaho.txt'); 
$Idaho_textArray = explode("\n", $Idaho_Text); 
$Illinois_Text = file_get_contents('state/Illinois.txt'); 
$Illinois_textArray = explode("\n", $Illinois_Text); 
$Indiana_Text = file_get_contents('state/Illinois.txt'); 
$Indiana_textArray = explode("\n", $Indiana_Text); 
$Iowa_Text = file_get_contents('state/Iowa.txt'); 

Dann habe ich 50 von ihnen haben:

while($row = $result->fetch_assoc()) { 

    if (isset($row["state"])) { 

     foreach ($row as $value){ 
      $California_randArrayIndexNum = array_rand($California_textArray); 
      $p_California = $California_textArray[$California_randArrayIndexNum]; 

      $Texas_randArrayIndexNum = array_rand($Texas_textArray); 
      $p_Texas = $Texas_textArray[$Texas_randArrayIndexNum]; 

      $Alabama_randArrayIndexNum = array_rand($Alabama_textArray); 
      $p_Alabama = $Alabama_textArray[$Alabama_randArrayIndexNum]; 

      $Alaska_randArrayIndexNum = array_rand($Alaska_textArray); 
      $p_Alaska = $Texas_textArray[$Alaska_randArrayIndexNum]; 

      $Arizona_randArrayIndexNum = array_rand($Arizona_textArray); 
      $p_Arizona = $California_textArray[$Arizona_randArrayIndexNum]; 
..... 

Dann habe ich 50 davon:

if ($row["state"] == "california") { 
      $stateip = $p_California; 
     } 
     else if ($row["state"] == "texas") { 
      $stateip = $p_Texas; 
     } 
     else if ($row["state"] == "alabama") { 
      $stateip = $p_Alabama; 
     } 
     else if ($row["state"] == "alaska") { 
      $stateip = $p_Alaska; 
     } 

Ich bin ziemlich sicher, dass es ein schlechter Ansatz ist. Vielleicht gibt es eine Möglichkeit, all das mit 3 Zeilen von foreach zu tun?

Antwort

1

Etwas wie folgt aus:

// holds your content 
$state_content = []; 

while($row = $result->fetch_assoc()) { 

    // check do we have state set 
    if (!empty($row["state"])) { 
     $stateip = getStateIpByName($row["state"]); 
    } 
} 

/** 
* Returns random IP 
*/ 
function getStateIpByName($state_name) { 
    $content = getStateContent($state_name); 

    return $content[array_rand($content)]; 
} 

/** 
* Returns your's state content by state name 
*/ 
function getStateContent($state_name) { 

    // checks do we already have content for this state 
    if(!isset($state_content[$state_name])) { 

     // generate file name 
     $file_name = "state/"; 
     $file_name .= str_replace(" ", "", ucwords($state_name)); 
     $file_name .= ".txt"; 

     $state_text = file_get_contents($file_name); 
     $state_content[$state_name] = explode("\n", $state_text); 
    } 

    return $state_content[$state_name]; 
} 

Es gibt wahrscheinlich einige Fehler, aber Sie werden Idee.

+0

'getStateContent ($ state_name) {' löst einen 'Parse-Fehler aus: Syntaxfehler, unerwarteter '{' in' und ich kann nicht verstehen, warum das passiert. – Ricardo

+0

Ich habe die Funktion verpasst, vielleicht war das das Problem? getStateContent ist da, um Ihren Inhalt aus der Textdatei zu holen. Es wird das tun, während Sie Datensätze für jeden Zustand loopen. Vielleicht müssen Sie hier einige Korrekturen vornehmen, ich nehme an, Ihre Dateien haben den gleichen Namen wie die Zustände in der Datenbank, nur mit dem ersten Großbuchstaben. –

+0

Das hat wie ein Zauber funktioniert, aber es gibt jetzt ein kleines Problem: 'Warnung: file_get_contents (state/.txt)' & 'Warnung: file_get_contents (state/New york.txt)'. In einigen Fällen versucht es, eine Datei ohne Namen zu laden (ich habe keine Null-Variablen) und manchmal versucht es, Zustandsdateien mit einem Leerzeichen in ihrem Namen zu laden, aber meine Zustandsvariablen sehen so aus: 'NewYork' (kein Leerzeichen) . Irgendeine Idee, wie man es repariert? – Ricardo

0

Shop alle Zustände in einem Array und tun alle Operationen innerhalb eines foreach Block

$states=['california',..]; 
foreach($states as $state){ 
    //Your code for one state 
    //Replace state name with $state variable 
    } 
+0

Ich mag diesen Ansatz, aber wie ändere ich sagen wir '$ XXX_Text' so wird es als' $ California_Text' erscheinen? Sie haben gesagt: "// Ersetzen Sie den Statusnamen durch $ state variable", aber ich denke, wenn ich $ state_Text mache, wird nur eine neue Variable erstellt, anstatt eine neue für jeden Status zu erstellen. – Ricardo

Verwandte Themen