2010-02-04 11 views
8
$arr[] = $new_item; 

Có thể lấy mục mới được lập trình không?Cách lấy khóa số của mục được đẩy mới trong PHP?

Lưu ý rằng nó không cần thiết count($arr)-1:

$arr[1]=2; 
$arr[] = $new_item; 

Trong trường hợp trên, đó là 2

+0

Chỉnh sửa: Bỏ qua tôi, tôi không nhận định câu hỏi. Đã đẩy yếu tố tương tác nào? Nút, nút radio, hộp kiểm hoặc ...? – Extrakun

+0

Câu trả lời của Bryan và Haim đều hoạt động ... tuy nhiên thường xuyên hơn khi không ai đó hỏi một câu hỏi như thế này họ không thực sự quan tâm đến chìa khóa cuối cùng của mảng, họ thực sự muốn phần tử cuối cùng trong mảng. Nếu đúng như vậy, bạn chỉ cần sử dụng hàm 'end()' và không lo lắng về khóa của nó. – philfreo

Trả lời

6

max(array_keys($array)) nên làm các trick

9

end() thực hiện công việc, để trở về giá trị,

nếu trợ giúp cho bạn,

bạn có thể sử dụng key() sau khi tìm nạp khóa.

sau khi tôi đã viết câu trả lời, tôi thấy chức năng trong liên kết này:

http://www.php.net/manual/en/function.end.php

function endKey($array){ 
end($array); 
return key($array); 
} 
+0

Tôi không nghĩ rằng sẽ làm việc.Từ Tài liệu PHP: "Mỗi mảng có một con trỏ bên trong đến phần tử 'hiện tại' của nó, được khởi tạo thành phần tử đầu tiên được chèn vào mảng." Có thể 'end()' có thể thực hiện công việc – rossipedia

+1

tôi sửa chữa nó, bạn phải, kết thúc của nó() –

0

Bạn có thể sử dụng một biến để theo dõi số lượng các mục trong một mảng:

$i = 0; 
$foo = array(); 
$foo[++$i] = "hello"; 
$foo[++$i] = "world"; 

echo "Elements in array: $i" . PHP_EOL; 
echo var_dump($foo); 
+0

Điều này sẽ ghi đè các khóa hiện có, và nếu không có gì cung cấp lợi ích không chỉ bằng cách sử dụng '$ foo []', tạo một mảng dựa trên một (có thể hoặc không thể là một lợi ích). – Duncan

1

Bạn có thể thử:

max(array_keys($array,$new_item)) 

array_keys($array,$new_item) sẽ trả về tất cả các khóa được liên kết với giá trị $new_item, dưới dạng mảng.

Trong tất cả các khóa này, chúng tôi quan tâm đến một khóa đã được thêm vào cuối cùng và sẽ có giá trị max.

+0

cuộc gọi tốt trên '$ new_item' ở đó, cảm ơn)) –

0

nếu mới được tạo, có thể bạn nên giữ tham chiếu đến phần tử. :)

Bạn có thể sử dụng array_reverse, như thế này:

$arr[] = $new_item; 
... 
$temp = array_reverse($arr); 
$new_item = $temp[0]; 

Hoặc bạn có thể làm điều này:

$arr[] = $new_item; 
... 
$new_item = array_pop($arr); 
$arr[] = $new_item; 

Nếu bạn đang sử dụng các mảng như một chồng, mà nó có vẻ như bạn đang , bạn nên tránh trộn trong các phím liên kết. Điều này bao gồm thiết lập $arr[$n] trong đó $n > count($arr). Sử dụng các chức năng array_* để thao tác và nếu bạn phải sử dụng các chỉ mục, hãy thực hiện điều này nếu 0 < $n < count($arr). Bằng cách đó, các chỉ mục sẽ được đặt hàng và tuần tự, và sau đó bạn có thể dựa vào $arr[count($arr)-1] để chính xác (nếu không, bạn có lỗi logic).

2

Cách an toàn nhất để làm việc đó là:

$newKey = array_push($array, $newItem) - 1; 
+0

Điều này có vẻ như nó sẽ hoạt động. Nhưng nó không "cảm thấy" đúng. Am i thiếu cái gì ở đây? – Achshar

+0

Nó sạch nhất mà tôi đã đưa ra cho đến nay. –

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