2016-07-02 10 views
-2

Ich habe einfach verschachtelt foreach(), aber ich bekomme nicht, was ich dachte, es wird.geschachtelt foreach() bekomme ein richtiges Ergebnis

hier ist der vollständige Code:

public function namelist() { 
     return array('lastname', 'firstname', 'middlename'); 
} 

public function nameRequest($namelist) { // either lastname, firstname or middlename 
     switch($namelist) { 
      case 'lastname': 
       $request = array('ramirez', 'corazon', 'gonzaga'); 
      break; 
      case 'firstname': 
       $request = array('michael', 'michaela', 'angel'); 
      break; 
      case 'middlename': 
       $request = array('osaka', 'oscar', 'roxas'); 
      break; 
     } 
    return $request; 
} 

ich ein Ergebnis wie dieses wollen:

Lastname: ramirez, corazon, gonzaga 
Firstname: michael, michaela, angel 
Middlename: osaka, oscar, roxas 

Aber als ich versuchte, es so zu kodieren:

public function fullname() { 
     $namelist = ''; 
     $namedata = ''; 
     $namelists = self::namelist(); 

     foreach ($namelists as $names) { 
      $namelist .= $names . ': '; 
      $namerequest = self::nameRequest($names); 

      foreach ($namerequest as $namerequests){ 
        $namedata .= $namerequests . ','; 
      } 
     } 
     return $namelist . ': ' . $namedata; 
} 

kehrt :

lastname: firstname: middlename: ramirez, corazon, gonzaga, michael, michaela, angel, osaka, oscar, roxas 

Also wie kann ich das lösen?

+0

Ihre Titelfrage basiert auf Ihre Frage ist irreführend. –

+0

Warum hat man einen Downvotes bekommen? – phew

+0

danke ich werde meinen titel bearbeiten – phew

Antwort

1

Es gibt einige fehl am Platze Aussagen:

<pre> 
<?php 
function namelist() { 
    return array('lastname', 'firstname', 'middlename'); 
} 
function nameRequest($namelist) { // either lastname, firstname or middlename 
    switch($namelist) { 
     case 'lastname': 
     $request = array('ramirez', 'corazon', 'gonzaga'); 
     break; 
     case 'firstname': 
     $request = array('michael', 'michaela', 'angel'); 
     break; 
     case 'middlename': 
     $request = array('osaka', 'oscar', 'roxas'); 
     break; 
    } 
    return $request; 
} 
function fullname() { 
    $namelist = ''; 
    $namelists = namelist(); 
    foreach ($namelists as $names) { 
     $namedata = ''; // moved 
     $namerequest = nameRequest($names); 
     foreach ($namerequest as $namerequests){ 
      $namedata .= $namerequests . ','; 
     } 
     $namelist .= $names . ': ' . $namedata . "\n"; // new 
    } 
    return $namelist; // modified 
} 
echo fullname(); 
?> 

Hinweis: Ich habe die Objektorientierung für meine Prüfung zu entfernen.
Test: http://phpfiddle.org/main/code/v82x-czc4

Sehen Sie sich auch implode() statt Ihrer inneren foreach verwenden. Es ist kürzer und löst das nachlaufende , Problem, das Sie noch haben.

+0

vielen dank – phew

1

Dies würde mehr Sinn machen, wenn Sie Ihre Schleife aktualisieren:

public function fullname() { 
      $namelist = ''; 
      $namedata = ''; 
      $namelists = self::namelist(); 
      $temp = ''; 

      foreach ($namelists as $names) { 
       $namerequest = self::nameRequest($names); 

       foreach ($namerequest as $namerequests){ 
         $namedata .= $namerequests . ','; 
       } 

       $temp .= $names . ': ' . $namedata.'<br/>'; 
      } 
      return $temp; 
    } 
+0

vielen dank – phew

1

Mit diesem Code ist es sehr einfach und einfachste und kurz von oben code.Because foreach Schleifendurchlauf 2 Mal auf über Code, so dass es die Ausführungszeit beeinflussen, so versuchen Sie bitte diese

<?php 
public function namelist() { 
     return array('lastname', 'firstname', 'middlename'); 
} 

public function nameRequest($namelist) { // either lastname, firstname or middlename 
     switch($namelist) { 
      case 'lastname': 
       $request = array('ramirez', 'corazon', 'gonzaga'); 
      break; 
      case 'firstname': 
       $request = array('michael', 'michaela', 'angel'); 
      break; 
      case 'middlename': 
       $request = array('osaka', 'oscar', 'roxas'); 
      break; 
     } 
    return $request; 
} 

public function fullname() { 
     $namelists = self::namelist(); 
     $fullname = ''; 
     foreach ($namelists as $names) { 
      $namerequest = self::nameRequest($names); 
      $nameIs = implode(",", $namerequest); 
      $fullname .= $names.": " . $nameIs . "<br>"; 
     } 
     return $fullname; 
} 

echo fullname(); 
?> 
+0

danke sanjay! – phew

+0

froh, ich könnte helfen –

+0

gute Idee, implode statt foreach – PaulH

Verwandte Themen