2009-09-20 62 views

Trả lời

48

Trong mã mẫu của bạn, nó chỉ là $key.

Nếu bạn muốn biết, ví dụ, nếu đây là lần đầu tiên, thứ hai, hoặc i thứ lặp của vòng lặp, đây là lựa chọn duy nhất của bạn:

$i = -1; 
foreach($arr as $val) { 
    $i++; 
    //$i is now the index. if $i == 0, then this is the first element. 
    ... 
} 

Tất nhiên, điều này doesn' t có nghĩa là $val == $arr[$i] vì mảng có thể là một mảng kết hợp.

+0

Có thể bắt đầu với '$ i = 0;' và di chuyển '$ i ++;' incrementor của bạn đến cuối vòng lặp để dễ đọc hơn. – pbarney

+1

@pbarney Tôi không đồng ý.Thực hiện gia tăng ở cuối là một lỗi đang chờ xảy ra: nếu có bất kỳ câu lệnh 'continue;' nào trong vòng lặp hoặc bất kỳ ai có thể thêm một cách hợp lý vào tương lai, thì số gia tăng ở cuối không hoạt động. Ngoài ra, điều này giữ cho việc khai báo biến và số gia tăng gần nhau. – Kip

0

$key là chỉ số cho các phần tử mảng hiện tại, và $val là giá trị của rằng phần tử mảng.

Yếu tố đầu tiên có một chỉ số của 0. Vì vậy, để truy cập vào nó, sử dụng $arr[0]

Để có được phần tử đầu tiên của mảng, sử dụng này

$firstFound = false; 
foreach($arr as $key=>$val) 
{ 
    if (!$firstFound) 
     $first = $val; 
    else 
     $firstFound = true; 
    // do whatever you want here 
} 

// now ($first) has the value of the first element in the array 
10
$i = 0; 
foreach ($arr as $key => $val) { 
    if ($i === 0) { 
    // first index 
    } 
    // current index is $i 

    $i++; 
} 
2

Chỉ mục hiện tại là giá trị $key. Và đối với những câu hỏi khác, bạn cũng có thể sử dụng:

current($arr) 

để có được những yếu tố đầu tiên của bất kỳ mảng, giả định rằng bạn đang không sử dụng next(), prev() hoặc các chức năng khác để thay đổi con trỏ bên trong của mảng.

+1

-1 cho $ key làm chỉ mục vì mảng có thể có các phím không phải số nguyên. – Eimantas

+1

+1 dưới dạng chỉ mục không phải là số nguyên: http://en.wikipedia.org/wiki/Index#Computer_science – Mathias

0

Bạn cũng có thể lấy phần tử đầu tiên trong hàm array_keys(). Hoặc array_search() các phím cho "chỉ mục" của khóa. Nếu bạn đang ở trong một vòng lặp foreach, bộ đếm gia tăng đơn giản (được gợi ý bởi kip hoặc cletus) có lẽ là phương pháp hiệu quả nhất của bạn.

<?php 
    $array = array('test', '1', '2'); 
    $keys = array_keys($array); 
    var_dump($keys[0]); // int(0) 

    $array = array('test'=>'something', 'test2'=>'something else'); 
    $keys = array_keys($array); 

    var_dump(array_search("test2", $keys)); // int(1)  
    var_dump(array_search("test3", $keys)); // bool(false) 
13

Đây là câu trả lời đầy đủ nhất cho đến nay và loại bỏ nhu cầu biến số $i nổi xung quanh. Nó là một kết hợp của câu trả lời của Kip và Gnarf.

$array = array('cat' => 'meow', 'dog' => 'woof', 'cow' => 'moo', 'computer' => 'beep'); 
foreach(array_keys($array) as $index=>$key) { 

    // display the current index + key + value 
    echo $index . ':' . $key . $array[$key]; 

    // first index 
    if ($index == 0) { 
     echo ' -- This is the first element in the associative array'; 
    } 

    // last index 
    if ($index == count($array) - 1) { 
     echo ' -- This is the last element in the associative array'; 
    } 
    echo '<br>'; 
} 

Hy vọng nó sẽ giúp ai đó.

+1

tạo một mảng hoàn toàn mới có độ dài 'count ($ array)' có vẻ như rất nhiều trên không để tránh giới thiệu một biến vô hướng – Kip

+2

array_keys là giải pháp cho tôi cảm ơn! – MrWashinton

5
foreach($array as $key=>$value) { 
    // do stuff 
} 

$ key là chỉ số của mỗi $ mảng yếu tố

+2

Không phải là không bình thường. Nếu mảng của bạn trông như thế này: '$ array = array ('cat' => 'meow', 'dog' => 'woof', 'cow' => 'moo', 'computer' => 'beep'); 'phím $ của mục đầu tiên sẽ là 'mèo'. –

+0

Cảm ơn bạn đã trả lời. Tôi nghĩ rằng chỉ số sẽ là chìa khóa. Đây là: 'mèo', 'chó', ... –

+1

Tôi không hiểu tại sao đây không phải là câu trả lời hay nhất trên trang này. –

0

cũng vì đây là google hit đầu tiên cho vấn đề này:

function mb_tell(&$msg) { 
    if(count($msg) == 0) { 
     return 0; 
    } 
    //prev($msg); 
    $kv = each($msg); 
    if(!prev($msg)) { 
     end($msg); 

     print_r($kv); 
     return ($kv[0]+1); 
    } 
    print_r($kv); 
    return ($kv[0]); 
} 
3

Bạn có thể nhận được giá trị chỉ số với điều này

foreach ($arr as $key => $val) 
{ 
    $key = (int) $key; 
    //With the variable $key you can get access to the current array index 
    //You can use $val[$key] to 

} 
Các vấn đề liên quan