2012-02-07 37 views
10

Trong vòng lặp for nó là đơn giản ...làm thế nào để kiểm tra xem con trỏ mảng là yếu tố đầu tiên trong vòng lặp foreach

for ($idx = 0 ; $idx < count ($array) ; $idx ++) 
{ 
    if ($idx == 0) 
    { 
     // This is the first element of the array. 
    } 
} 

Làm thế quái nào được này thực hiện trong một vòng lặp foreach?

có chức năng như is_first() hoặc gì đó không?

Tôi đang tìm một cái gì đó như:

foreach ($array as $key => $value) 
{ 
    if (/* is the first element */) 
    { 
     // do logic on first element 
    } 
    else 
    { 
     // all other logic 
    } 
} 

Tôi đã suy nghĩ tôi có thể thiết lập một bool như $is_first = true; và sau đó ngay sau khi vòng lặp được một lần, thiết lập các bool false.

Nhưng php có rất nhiều chức năng được xây dựng trước và id thay vì sử dụng ... hoặc một cách khác ...

Các bool toàn cách có vẻ gần giống như ... cheeting: s

Cheers ,

Alex

+3

Vì vậy, vấn đề gian lận chính xác là gì? ;-) –

Trả lời

10

Bạn có thể làm điều này bằng "hiện tại()"

$myArray = array('a', 'b', 'c'); 
if (current($myArray) == $myArray[0]) { 
    // We are at the first element 
} 

Documents: http://php.net/manual/en/function.current.php

cách thu hồi các yếu tố đầu tiên:

$myArray[0] 

$slice = array_slice($myArray, 0, 1); 
$elm = array_pop($slice); 
+0

Tôi thích cái này nhiều nhất :) –

+6

Miễn là nó không phải là một mảng kết hợp, hoặc nó được lập chỉ mục với khóa đầu tiên là 0 –

+0

Tôi đã sửa đổi bài viết đầu tiên của mình, cung cấp cách tìm nạp phần tử đầu tiên cho các loại mảng khác. – RobinUS2

0

Bạn chỉ có thể đưa hoạt động vào yếu tố đầu tiên trước khi foreach vòng lặp, loại bỏ các yếu tố và sau đó nhập foreach vòng lặp cho t anh ta còn lại của các yếu tố.

2

bạn có thể sử dụng truy cập thay vì bool

$i = 0; 

foreach ($array as $key => $value) 

    if ($i == 0) { 
     // first 
    } else { 
     // last 
    } 
    // … 
    $i++; 
} 

hoặc trích xuất các phần tử đầu tiên của

$first = array_shift($array); 

foreach qua mảng vẫn;

+0

Sử dụng mảng_shift và foreach qua mảng còn lại có vẻ là giải pháp sạch nhất, cung cấp cho bạn không sử dụng mảng sau khi lặp qua nó. Nếu không, bạn muốn bật phần tử đầu tiên trở lại với array_unshift. –

1
$first = array_shift($idx); 

foreach($idx as $key => $value){ 
... 
... 
... 
} 
-1

Tôi nghĩ rằng tất cả các bạn muốn phải làm là if ($key === 0)

+1

Miễn là nó không phải là một mảng kết hợp, hoặc nó được lập chỉ mục với khóa đầu tiên là 0 –

+0

Đúng nhưng câu hỏi của ông là về dịch nếu ($ idx == 0) với foreach – Nabab

+0

Trong trường hợp này, có! Tôi chỉ đang dự đoán câu hỏi tiếp theo (hoặc câu hỏi được nêu ra trong 6 tháng khi ai đó trong một tình huống tương tự có một câu hỏi tương tự, nhưng không sử dụng một mảng được lập chỉ mục đơn giản) –

5
$myArray = array('a' => 'first', 'b' => 'second', 'c' => 'third'); 

reset($myArray); 
$firstKey = key($myArray); 
foreach($myArray as $key => $value) { 
    if ($key === $firstKey) { 
     echo "I'm Spartacus" , PHP_EOL; 
    } 
    echo $key , " => " , $value , PHP_EOL; 
} 
14

Tôi thường làm điều này:

$isFirst = true; 
foreach($array as $key => $value){ 
    if($isFirst){ 
    //Do first stuff 
    }else{ 
    //Do other stuff 
    } 
    $isFirst = false; 
} 

trình với bất kỳ loại của mảng, rõ ràng.

0

Dưới đây là hai chức năng sẽ phát hiện nếu một khóa mảng là đầu tiên hoặc cuối cùng.

Nếu không có khóa nào được cung cấp, nó sẽ giả định vị trí con trỏ hiện tại.

Trong vòng lặp foreach, bạn sẽ cần phải cung cấp khóa vì con trỏ sẽ không chính xác.

public static function isFirst($array, $key=null) 
{ 
    if($key===null){ 
     $key = key($array); 
    } 
    reset($array); 
    $first = key($array); 
    return $first === $key; 
} 

public static function isLast($array, $key=null) 
{ 
    if($key===null){ 
     $key = key($array); 
    } 
    end($array); 
    $last = key($array); 
    return $last === $key; 
} 
Các vấn đề liên quan