Hướng dẫn php get next key in foreach - php lấy khóa tiếp theo trong foreach

Tôi đang tìm cách để có được cặp khóa/giá trị tiếp theo và 1 trong một foreach (). Ví dụ:

$a = array('leg1'=>'LA', 'leg2'=>'NY', 'leg3'=>'NY', 'leg4'=>'FL');

foreach($a AS $k => $v){

    if($nextval == $v && $nextnextval == $v){
       //staying put for next two legs
    }

}

Hướng dẫn php get next key in foreach - php lấy khóa tiếp theo trong foreach

LAJOS VERES

13,5K7 Huy hiệu vàng43 Huy hiệu bạc56 Huy hiệu Đồng7 gold badges43 silver badges56 bronze badges

Đã hỏi ngày 9 tháng 12 năm 2013 lúc 20:02Dec 9, 2013 at 20:02

2

Bạn không thể truy cập theo cách đó các giá trị tiếp theo và tiếp theo.

Nhưng bạn có thể làm điều gì đó tương tự:

$a = array('leg1'=>'LA', 'leg2'=>'NY', 'leg3'=>'NY', 'leg4'=>'FL');

$keys = array_keys($a);
foreach(array_keys($keys) AS $k ){
    $this_value = $a[$keys[$k]];
    $nextval = $a[$keys[$k+1]];
    $nextnextval = $a[$keys[$k+2]];

    if($nextval == $this_value && $nextnextval == $this_value){
       //staying put for next two legs
    }
}

Đã trả lời ngày 9 tháng 12 năm 2013 lúc 20:06Dec 9, 2013 at 20:06

LAJOS VERESLAJOS VERESLajos Veres

13,5K7 Huy hiệu vàng43 Huy hiệu bạc56 Huy hiệu Đồng7 gold badges43 silver badges56 bronze badges

1

Đã hỏi ngày 9 tháng 12 năm 2013 lúc 20:02

$a = array('leg1'=>'LA', 'leg2'=>'NY', 'leg3'=>'NY', 'leg4'=>'FL');

// initiate the iterator for "next_val":
$nextIterator = new ArrayIterator($a);
$nextIterator->rewind();
$nextIterator->next(); // put the initial pointer to 2nd position

// initiaite another iterator for "next_next_val":    
$nextNextIterator = new ArrayIterator($a);
$nextNextIterator->rewind();
$nextNextIterator->next();
$nextNextIterator->next(); // put the initial pointer to 3rd position

foreach($a AS $k => $v){

    $next_val = $nextIterator->current();
    $next_next_val = $nextNextIterator->current();

    echo "Current: $v; next: $next_val; next_next: $next_next_val" . PHP_EOL;

    $nextIterator->next();
    $nextNextIterator->next();
}

Bạn không thể truy cập theo cách đó các giá trị tiếp theo và tiếp theo.

Nhưng bạn có thể làm điều gì đó tương tự:Dec 9, 2013 at 20:35

Đã trả lời ngày 9 tháng 12 năm 2013 lúc 20:06Maciej Sz

LAJOS VERESLAJOS VERES7 gold badges40 silver badges54 bronze badges

Tôi đã tìm thấy giải pháp với độ phức tạp O(n) và không yêu cầu tìm kiếm qua mảng trở lại và chuyển tiếp:

while($current = current($a)) {
    $next = next($a);
    $nextnext = next($a);

    // Comparison logic here

    prev($a); // Because we moved the pointer ahead twice, lets back it up once
}

Chỉ cần nhớ kiểm tra valid() nếu bạn có kế hoạch chuyển tiếp trên $next_val$next_next_val.

Đã trả lời ngày 9 tháng 12 năm 2013 lúc 20:35

Maciej Szmaciej SZDec 9, 2013 at 20:12

10,2K7 Huy hiệu vàng40 Huy hiệu bạc54 Huy hiệu đồngjszobody

Đây là một cách để làm điều đó:6 gold badges59 silver badges70 bronze badges

Ví dụ: http://3v4l.org/igcxw

Lưu ý rằng vòng lặp được viết theo cách này sẽ không bao giờ kiểm tra phần tử cuối cùng trong mảng ban đầu của bạn. Điều đó có thể được sửa chữa, mặc dù với logic hiện tại của bạn, dường như không quan trọng vì không có yếu tố "nhiều hơn" để so sánh phần cuối cùng.

Đã trả lời ngày 9 tháng 12 năm 2013 lúc 20:12

$keys = array_keys($array);
for ($i = 0; $i < count($keys); $i++) {
    $cur = $array[$keys[$i]];
    $next = $array[$keys[$i+1]];
}

JSZOBODYJSZOBODYDec 9, 2013 at 20:11

Phù bằng vàng 28k659 Huy hiệu bạc70 Huy hiệu đồngPeter

Hãy xem bộ nhớ đệm, như được mô tả trong câu trả lời này:1 gold badge23 silver badges32 bronze badges

Đi trước khi lặp một mảng trong PHP

$a = array('leg1'=>'LA', 'leg2'=>'NY', 'leg3'=>'NY', 'leg4'=>'FL');

// Prints LA NY FL
$last_v = null;
foreach ( $a as $k => $v ){
    if ( $last_v == $v ) {
        /**
         *  Duplicate value, so skip it
         */
        continue;
    }
    echo $v.' ';
    $last_v = $v;
}

Hoặc sử dụng Array_Keys () nằm trong một câu trả lời khác được đăng cho cùng một câu hỏi, ví dụ:Dec 9, 2013 at 20:56

Đã trả lời ngày 9 tháng 12 năm 2013 lúc 20:11Dave

Peterpeter1 gold badge15 silver badges9 bronze badges

2.4761 Huy hiệu vàng23 Huy hiệu bạc32 Huy hiệu đồng

Bạn không thể chỉ đơn giản là "ở lại" trong một vòng lặp. Tôi nghi ngờ bạn đang tìm cách làm một cái gì đó dễ dàng hơn nhiều so với viết các trình lặp tùy chỉnh. Nếu bạn chỉ muốn bỏ qua các mục với các khóa trùng lặp, thì hãy theo dõi khóa cuối cùng và so sánh nó với bản hiện tại.

Đã trả lời ngày 9 tháng 12 năm 2013 lúc 20:56Dec 9, 2013 at 20:09

ern0ern0ern0

Davedave25 silver badges35 bronze badges

Làm thế nào để bạn sử dụng giá trị khóa trong foreach?

Vòng lặp foreach là cách tốt nhất để truy cập vào từng cặp khóa/giá trị từ một mảng. Array_ExPR là một mảng. Trong mỗi vòng lặp, giá trị của phần tử hiện tại của mảng được gán cho $ giá trị và con trỏ mảng bên trong được nâng cao bởi một và quá trình tiếp tục đạt đến phần tử mảng cuối cùng.. array_expr is an array. In every loop the value of the current element of the array is assigned to $value and the internal array pointer is advanced by one and the process continue to reach the last array element.

Tôi có thể sử dụng tiếp tục trong foreach PHP không?

Giới thiệu.Câu lệnh tiếp tục là một trong những từ khóa điều khiển vòng lặp trong PHP.Khi luồng chương trình xuất hiện tiếp tục bên trong một vòng lặp, phần còn lại của các câu lệnh trong vòng lặp hiện tại của vòng lặp được bỏ qua và lần lặp tiếp theo của vòng lặp bắt đầu.Nó có thể xuất hiện bên trong trong khi, làm trong khi, cũng như vòng lặp foreach.It can appear inside while, do while, for as well as foreach loop.

Việc sử dụng hiện tại () và next () là gì?

Hàm () tiếp theo di chuyển con trỏ bên trong và đầu ra, phần tử tiếp theo trong mảng.Các phương thức liên quan: Prev () - Di chuyển con trỏ bên trong và đầu ra, phần tử trước đó trong mảng.Dòng điện () - Trả về giá trị của phần tử hiện tại trong một mảng.returns the value of the current element in an array.

Làm thế nào để tôi đi qua một mảng trong PHP?

Có một số cách để đi qua các mảng trong PHP và cách bạn chọn sẽ phụ thuộc vào dữ liệu của bạn và nhiệm vụ bạn đang thực hiện ...
Cấu trúc foreach.....
Các chức năng của Iterator.....
Sử dụng một vòng lặp.....
Gọi một hàm cho mỗi phần tử mảng.....
Giảm một mảng.....
Tìm kiếm các giá trị ..