2010-11-11 10 views
28

Czy możliwe jest posiadanie pętli foreach w PHP z wieloma zmiennymi "indeksowymi", podobnymi do poniższych (które nie używają poprawnej składni)?Wiele zmiennych indeksowych w pętli foreach PHP

foreach ($courses as $course, $sections as $section) 

Jeśli nie, czy istnieje dobry sposób na osiągnięcie tego samego rezultatu?

+0

Możesz chcieć wyjaśnić. Czy próbujesz przejść przez tablicę 2D lub 2 tablice? – Jere

+1

Nie wiesz, jak to zadziała? Czy możesz wyjaśnić nieco więcej, co robisz? Możesz mieć zagnieżdżone foreach lub połączyć tablicę przed iteracją.Daj nam znać, co próbujesz zrobić, a pomożemy Ci to zrobić. –

Odpowiedz

40

osiągnąć tylko, że wynik można zrobić

foreach (array_combine($courses, $sections) as $course => $section) 

ale to działa tylko na dwóch tablicach

+4

Uwaga; jeśli '$ courses' są obiektami, to nie zadziała. – Dan

+4

Uwaga; jeśli '$ courses' to ciągi liczbowe, zamienione zostaną na liczby całkowite. – hakre

+0

Mam nadzieję, że nie poprawiam wątku, który jest zbyt martwy. Ale próbuję osiągnąć to samo, co miałem na sekundę, ale nie sądzę, żeby to działało, ale tak się nie stało, ale moje życie nie pamięta kodu, który umieściłem. próbując uzyskać kategorię i wartość, przejdź do bazy danych. \t foreach ($ _ POST [kategoria] jako kategoria $ i => $) \t { \t // Uzyskaj wartości z wiadomości. \t $ category = mysql_real_escape_string (kategoria $); \t $ value = mysql_real_escape_string ($ _ POST ['value'] [$ i]); – Spartacus38

12

Jeżeli obie tablice są tej samej wielkości, można użyć for pętlę jako:

for($i=0, $count = count($courses);$i<$count;$i++) { 
$course = $courses[$i]; 
$section = $sections[$i]; 
} 
4

będzie musiał użyć zagnieżdżone pętle tak:

foreach($courses as $course) 
{ 
    foreach($sections as $section) 
    { 
    } 
} 

Oczywiście, będzie to zapętlaj każdą sekcję dla każdego kursu.

Jeśli chcesz spojrzeć na każdej parze, jesteś lepiej wyłączyć za pomocą albo obiekty, które zawierają przedmiotów/par rozdział i zapętlenie nad tym, czy upewniając się, że indeksy są takie same i robi:

foreach($courses as $key => $course) 
{ 
    $section = $sections[$key]; 
} 
1

Co by to dokładnie zrobiło? Czy $courses i $sections są tylko dwoma oddzielnymi tablicami i chcesz wykonać tę samą funkcję dla wartości w każdym z nich? Zawsze możesz zrobić:

foreach(array_merge($courses, $sections) as $thing) { ... } 

To sprawia, że ​​wszystkie zwykłe założenia dotyczące array_merge, oczywiście.

Czy jest to, że $sections pochodzi z $course i chcesz zrobić coś dla każdej sekcji w każdym kursie?

foreach($courses as $course) { 
    foreach($sections as $section) { 
     // Here ya go 
    } 
} 
0

jak to?

foreach($array as $b=>$c){ 

} 
2

Nie, ponieważ te tablice mogą mieć inną liczbę pozycji.

Musisz jawnie napisać coś takiego:

for ($i = 0; $i < count($courses) && $i < count($sections); ++$i) { 
    $course = $courses[$i]; 
    $section = $sections[$i]; 

    //here the code you wanted before 
} 
+1

pre-execute swój kod $ i zzzzBov

+1

Pracuję z bardzo dużymi projektami, które działają pod dużym obciążeniem i zwykle to naprawdę nie ma znaczenia, ponieważ pojedyncze zapytanie SQL jest 1000 wolniejsze niż php :). A jeśli musisz pracować z BARDZO dużymi tablicami, to jest coś nie tak z projektowaniem aplikacji. – Daimon

2

Nie, to być może jeden z tych rzadkich przypadków kursory tablicy PHP są przydatne:

reset($sections); 
foreach ($courses as $course) 
{ 
list($section) = each($sections); 
} 
3

TRY -

1)

<?php 
$FirstArray = array('a', 'b', 'c', 'd'); 
$SecondArray = array('1', '2', '3', '4'); 

foreach($FirstArray as $index => $value) { 
    echo $FirstArray[$index].$SecondArray[$index]; 
    echo "<br/>"; 
} 
?> 

lub 2)

<?php 
$FirstArray = array('a', 'b', 'c', 'd'); 
$SecondArray = array('1', '2', '3', '4'); 

for ($index = 0 ; $index < count($FirstArray); $index ++) { 
    echo $FirstArray[$index] . $SecondArray[$index]; 
    echo "<br/>"; 
} 
?>