2017-03-22 6 views
-1

Ich habe zwei verschachtelte foreach-Schleifen:php - Weiter verschachtelte foreach-Schleifen in der gleichen Zeit

$ren1 = array("class ConcreteClass1", "class hello"); 
$ren2 = array("class ConcreteClass2", "class bye"); 

    if(!empty($ren1) && !empty($ren2)){ 
     foreach($ren1 as $key1=>$value1){ 
      foreach($ren2 as $key2=>$value2){ 
       $result .= "Class renamed: ". $ren1[$key1]. " ==> ". $ren2[$key2]. "\n"; continue 2; 
      } 
     } 
    } 

ich Pause nutzen und weiter, aber sie funktionierte nicht.

Was soll ich tun Wunsch Ausgabe wie folgt zu erhalten:

class ConcreteClass1 ==> class ConcreteClass2 
class hello ==> class bye 

Vielen Dank für jede Hilfe.

+0

wo möchten Sie Ihre O/P in Schleife oder externe Schleife verwenden – webpic

+0

Nicht ganz sicher, was Sie hier erreichen wollen, aber ich vermute, es ist eher ein Problem der Umstrukturierung Ihres Arrays, um es einfacher zu verarbeiten. Für den Datensatz können Sie keine "simultanen" foreach-Schleifen haben, da dies parallele Ausführung impliziert und PHP single-threaded ist, es sei denn, Sie verwenden eine Spracherweiterung wie Pthreads. Was Sie haben, ist verschachtelte foreach Schleifen. Für jede Iteration der äußeren Schleife wird die innere Schleife vollständig ausgeführt. – GordonM

Antwort

1

Es besteht keine Notwendigkeit verschachtelte Schleifen zu verwenden:

$ren1 = array("class ConcreteClass1", "class hello"); 
$ren2 = array("class ConcreteClass2", "class bye"); 

if(!empty($ren1) && !empty($ren2)){ 
    foreach($ren1 as $key=>$value){ 
     echo "Class renamed: ". $ren1[$key]. " ==> ". $ren2[$key]. "\n"; 
    } 
} 

Wenn der Index zwischen den Feldern immer mit dem anderen verbunden ist, gerade diesen Index auf dem zweiten Array.

1

können Sie Ihren Code wie folgt ändern:

foreach($ren1 as $index => $value) { 
$result .= "Class renamed: ". $value. " ==> ". $ren2[$index]. "\n"; 
} 
0

array1 und array2 zwei Wert haben. Du schreibst zwei verschachtelte foreach. Also diese verschachtelten foreach laufen 4 mal (2 x 2).

0

Das Problem hier ist, dass Sie Ihre Daten nicht in einem Format strukturieren, das das Parsen so macht, wie Sie es wollen. Wenn Sie ein einzelnes assoziatives Array anstelle von mehreren Arrays pro Klasse verwenden, werden Sie feststellen, dass Ihre Arbeit viel einfacher ist.

$ren = [ 
    "ConcreteClass1" => "hello", 
    "ConcreteClass2" => "bye", 
]; 
$result = ""; 

foreach ($ren as $oldClass => $newClass) { 
    $result .= "Class renamed: class {$oldClass} ==> class {$newClass}\n"; 
} 

By the way, wenn Sie sicher $ ren machen, ist immer ein Array Sie nicht! Leeren Scheck benötigen. Eine foreach auf einem leeren Array ist im Wesentlichen ein No-Op.

Verwandte Themen