2010-11-11 51 views
28

Có thể có một vòng lặp foreach trong PHP với nhiều biến "chỉ mục", tương tự như sau (không sử dụng đúng cú pháp) không?Nhiều biến chỉ mục trong vòng lặp foreach PHP

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

Nếu không, có cách nào tốt để đạt được kết quả tương tự không?

+0

Bạn có thể muốn làm rõ. Bạn đang cố gắng lặp qua một mảng 2D hoặc 2 mảng? – Jere

+1

Bạn không chắc chắn cách thức này sẽ hoạt động? Bạn có thể giải thích thêm một chút về những gì bạn đang làm không? Bạn có thể có một foreach lồng nhau hoặc kết hợp mảng trước khi lặp lại.Hãy cho chúng tôi biết những gì bạn đang cố gắng làm và chúng tôi có thể giúp bạn làm điều đó. –

Trả lời

40

để đạt được chỉ kết quả mà bạn có thể làm

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

nhưng điều đó chỉ làm việc cho hai mảng

+4

Lưu ý; nếu '$ courses' là các đối tượng, điều này sẽ không hoạt động. – Dan

+4

Lưu ý; nếu '$ courses' là chuỗi số, chúng sẽ chuyển thành số nguyên. – hakre

+0

Hy vọng rằng tôi không ressurcting một sợi đó là quá chết. Nhưng, tôi đang cố gắng để đạt được điều tương tự, tôi đã có một giây, nhưng tôi không nghĩ rằng nó làm việc, nhưng nó đã làm, nhưng đối với cuộc sống của tôi không thể nhớ mã tôi đưa vào. cố gắng để có thể loại và giá trị đi vào cơ sở dữ liệu. \t foreach ($ _ POST ['category'] dưới dạng $ i => $ category) \t { \t // Nhận các giá trị từ bài đăng. \t $ category = mysql_real_escape_string ($ category); \t $ value = mysql_real_escape_string ($ _ POST ['value'] [$ i]); – Spartacus38

12

Nếu cả hai mảng là có cùng kích thước, bạn có thể sử dụng một vòng lặp for như:

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

Bạn sẽ cần phải sử dụng các vòng lặp lồng nhau như thế này:

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

Tất nhiên, điều này sẽ lặp qua tất cả các phần cho mỗi khóa học.

Nếu bạn muốn nhìn vào mỗi cặp, bạn nên sử dụng một trong hai đối tượng có chứa quá trình/phần theo cặp và Looping trên đó, hoặc đảm bảo các chỉ số đều giống nhau và thực hiện:

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

Điều đó sẽ làm gì, chính xác? Có phải $courses$sections chỉ là hai mảng riêng biệt và bạn có muốn thực hiện cùng một chức năng cho các giá trị trong mỗi mảng không? Bạn luôn có thể làm:

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

Điều này làm cho tất cả các giả định thông thường về array_merge, tất nhiên.

Hoặc là $sections xuất phát từ $course và bạn muốn làm điều gì đó cho từng phần trong mỗi khóa học?

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

như thế này?

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

} 
2

Không, vì các mảng đó có thể có số lượng mặt hàng khác.

Bạn phải explicitely viết một cái gì đó như thế:

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

    //here the code you wanted before 
} 
+1

trước khi thực thi mã '$ i zzzzBov

+1

Tôi làm việc với các dự án rất lớn hoạt động dưới tải cao và thường thực sự không quan trọng vì truy vấn SQL đơn chậm hơn 1000 lần so với số lượng php :). Và nếu bạn phải làm việc với các mảng RẤT lớn thì có điều gì đó sai trái với thiết kế ứng dụng. – Daimon

2

Không, đây có lẽ là một trong những trường hợp hiếm hoi con trỏ mảng PHP có ích:

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/>"; 
} 
?> 

hoặc 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/>"; 
} 
?> 
Các vấn đề liên quan