Tôi đang viết foreach
không bắt đầu tại chỉ mục thứ 0 mà thay vào đó bắt đầu từ chỉ mục đầu tiên của mảng của tôi. Có cách nào để bù đắp điểm khởi đầu của vòng lặp không?Cách bắt đầu vòng lặp foreach tại một chỉ mục cụ thể trong PHP
Trả lời
Trong một foreach bạn không thể làm điều đó. Chỉ có hai cách để có được những gì bạn muốn:
- Sử dụng một vòng lặp for và bắt đầu từ vị trí 1
- sử dụng một foreach và sử dụng một cái gì đó như if ($ key> 0) xung quanh mã thực tế của bạn
A foreach thực hiện tên của nó là gì. Làm điều gì đó cho mọi yếu tố :)
EDIT: OK, một giải pháp rất xấu đến với tâm trí của tôi. Hãy thử các cách sau:
foreach(array_reverse(array_pop(array_reverse($array))) as $key => $value){
...
}
Điều đó sẽ đảo ngược mảng, bật phần tử cuối cùng và đảo ngược lại. Hơn bạn sẽ có một phần tử không bao gồm phần tử đầu tiên.
Nhưng tôi khuyên bạn nên sử dụng một trong các giải pháp khác. Tốt nhất sẽ là người đầu tiên.
Và một biến thể: Bạn có thể sử dụng array_slice() cho rằng:
foreach(array_slice($array, 1, null, true) as $key => $value){
...
}
Nhưng bạn nên sử dụng cả ba thông số để giữ cho các phím của mảng cho vòng lặp foreach của bạn:
sử dụng array_slice có thể thực hiện điều này trong vòng lặp foreach, nhưng thực hành đó nên được đánh giá cao và bị trừng phạt bởi phải đọc loại mã đó. – Kris
Đó là lý do tại sao tôi chỉ ra rằng đó là một phương pháp EVIL để làm điều đó. Nhưng tôi sẽ không sử dụng bất kỳ cá nhân nào của Solutoin. Tôi sẽ sử dụng một câu lệnh if hoặc vòng lặp for. – 2ndkauboy
Bạn có thể sử dụng chức năng array_slice
:
$arr = array(); // your array
foreach(array_slice($arr, 1) as $foo){
// do what ever you want here
}
Tất nhiên, bạn có thể sử dụng bất kỳ giá trị chênh lệch nào bạn muốn. Trong trường hợp này, 1
'bỏ qua' phần tử đầu tiên của mảng.
Không có gì đáng giá để yêu cầu tạo một bản sao của mảng đó. Có thể là một điều xấu nếu mảng lớn. –
Bạn đúng ... điều này sẽ hoạt động tốt hơn cho các mảng ngắn. Cám ơn bạn đã góp ý. – Cristian
Có vẻ như một vòng lặp for sẽ là cách tốt hơn để đi đây, nhưng nếu bạn nghĩ rằng bạn PHẢI sử dụng foreach bạn có thể thay đổi các yếu tố đầu tiên ra khỏi mảng và unshift nó trở lại:
$a = array('foo','bar');
$temp = array_shift($a);
foreach ($a as $k => $v) {
//do something
}
array_unshift($a, $temp);
Chỉ cần lưu ý rằng cú pháp '$ k => $ v' chỉ dành cho mảng kết hợp. Đối với các mảng được lập chỉ mục, bạn chỉ muốn '$ a là $ v'. –
@Michael: $ k => $ v cũng sẽ hoạt động đối với mảng được lập chỉ mục và trả về số chỉ mục của giá trị hiện tại. – 2ndkauboy
Oh ... cool! : D lol –
Giữ nó đơn giản.
foreach ($arr as $k => $v) {
if ($k < 1) continue;
// your code here.
}
Một Foreach
sẽ thiết lập lại các mảng:
Lưu ý: Khi foreach đầu tiên bắt đầu thực hiện, con trỏ mảng nội bộ được tự động thiết lập lại tới phần tử đầu tiên của mảng. Điều này có nghĩa là bạn không cần phải gọi reset() trước một vòng lặp foreach.
Hoặc sử dụng một vòng lặp for
(chỉ nếu đây là không một mảng kết hợp)
$letters = range('a','z');
for($offset=1; $offset < count($letters); $offset++) {
echo $letters[$offset];
}
hoặc một while
vòng lặp (có thể là bất kỳ mảng)
$letters = range('a','z');
next($letters);
while($letter = each($letters)) {
echo $letter['value'];
}
hoặc với một LimitIterator
$letters = new LimitIterator(new ArrayIterator(range('a','z')), 1);
foreach($letters as $letter) {
echo $letter;
}
cho phép bạn chỉ định bù đắp bắt đầu và đếm thông qua hàm tạo.
Tất cả các ý trên sản lượng các chữ b để z thay vì a đến z
Cũng không có cơ thể nói nó nhưng nếu bạn không nhớ thay đổi mảng và nếu chúng ta muốn bắt đầu từ phần tử thứ hai của mảng:
unset($array[key($array)]);
foreach($array as $key=>$value)
{
//do whatever
}
nếu bạn làm tâm trí, chỉ cần thêm,
$saved = $array;
unset($array[key($array)]);
foreach($array as $key=>$value)
{
//do whatever
}
$array = $saved;
Hơn nữa nếu bạn muốn bỏ qua một chỉ số nổi tiếng nhất định, chỉ subtitute
key($array)
bởi chỉ số cho
- 1. Bắt đầu một chuỗi mới trong vòng lặp foreach
- 2. Nhiều biến chỉ mục trong vòng lặp foreach PHP
- 3. Tại sao vòng lặp foreach chỉ đọc trong C#
- 4. Bắt đầu công việc Trong foreach Sử dụng vòng lặp Giá trị của khoản mục cuối
- 5. Bỏ qua mục của một loại hình cụ thể trong foreach vòng lặp
- 6. Làm cách nào để có được chỉ mục mảng hiện tại trong vòng lặp foreach?
- 7. Giá trị khóa vòng lặp PHP foreach
- 8. C# foreach trong vòng lặp foreach
- 9. Làm thế nào để bạn nhận được chỉ mục của vòng lặp hiện tại của vòng lặp foreach?
- 10. thay đổi mảng ban đầu bên trong vòng lặp foreach?
- 11. PHP - Ký hiệu & trước biến trong vòng lặp foreach
- 12. DeleteObject() trong vòng lặp foreach
- 13. Java, Làm cách nào để lấy chỉ mục/khóa hiện tại trong vòng lặp "cho mỗi"
- 14. Perl tương đương với Php foreach vòng lặp
- 15. Smarty: in một phần tử cụ thể của một mảng KHÔNG sử dụng vòng lặp foreach
- 16. Vòng lặp foreach của SQL
- 17. giá trị Sum trong foreach vòng lặp php
- 18. Tại sao tôi không thể cập nhật dữ liệu trong một mảng với vòng lặp foreach?
- 19. Vòng lặp foreach (công cụ tạo mẫu node.js)
- 20. Break vòng lặp foreach bên trong và tiếp tục vòng lặp foreach bên ngoài
- 21. PHP - Thêm số div vào vòng lặp foreach 4 lần
- 22. PHP: Lấy chìa khóa từ một mảng trong một vòng lặp foreach
- 23. PHP: cách làm foreach và bắt đầu từ yếu tố thứ sáu của bộ sưu tập?
- 24. Tại sao tôi không thể đặt thuộc tính của biến lặp trong vòng lặp foreach?
- 25. Tại sao Java không cho phép foreach trên các trình vòng lặp (chỉ trên các vòng lặp)?
- 26. Có vòng lặp foreach trong Go không?
- 27. Vòng lặp, người mới bắt đầu
- 28. LinqToExcel - Cần bắt đầu tại một hàng cụ thể
- 29. Người mới bắt đầu C++: Biến đổi chỉ mục-cú pháp thành cú pháp vòng lặp
- 30. tạo nhiều DropDownListFor trong vòng lặp foreach
nó Wouldnt là tốt hơn nếu bạn sử dụng FOR thay thế? – Prix
Xử lý các cặp khóa-giá trị dễ dàng hơn rất nhiều trong vòng lặp foreach và tôi đoán đó là lý do mà anh ấy muốn kiếm tiền. Hoặc anh ấy thậm chí có một foreach và không muốn thay đổi rất nhiều mã. – 2ndkauboy