Tìm kiếm khóa / chỉ mục cao nhất trong một mảng


92

Làm cách nào với PHP để lấy khóa / chỉ mục cao nhất trong một mảng? Tôi biết làm thế nào để làm điều đó cho các giá trị.

Ví dụ: Từ mảng này, tôi muốn lấy "10" dưới dạng giá trị số nguyên:

$arr = array( 1 => "A", 10 => "B", 5 => "C" );

Tôi biết làm thế nào tôi có thể lập trình nó, nhưng tôi đã tự hỏi bản thân mình nếu có một chức năng cho điều này.

Câu trả lời:


205

Điều này sẽ hoạt động tốt

$arr = array( 1 => "A", 10 => "B", 5 => "C" );
max(array_keys($arr));

Bạn có biết liệu nó có hoạt động tốt không nếu một khóa được đặt như sau: $ arr = array (1 => "A", 10 => "B", 5 => "C", "15" => "D ");
Raffael Luthiger

2
@Raffael Luthiger hãy thử kiểm tra nó và xem liệu bạn có nhận được kết quả phù hợp hay không.
Jonathan Kuhn

1
Điều này không xử lý trường hợp của một mảng trống. Trực tiếp từ hướng dẫn sử dụng PHP cho max:If an empty array is passed, then FALSE will be returned and an E_WARNING error will be emitted.
Siphon

33

Bạn có thể nhận được khóa tối đa theo cách này:

<?php
$arr = array("a"=>"test", "b"=>"ztest");
$max = max(array_keys($arr));
?>

Tôi xin lỗi, ai đó đã đăng câu trả lời tương tự trước tôi.
Fabrizio D'Ammassa

2
$keys = array_keys($arr);
$keys = rsort($keys);

print $keys[0];

nên in "10"


2

Tôi đã gặp phải tình huống cần lấy khóa có sẵn tiếp theo trong một mảng, là + 1 cao nhất.

Ví dụ: nếu mảng là $ data = ['1' => 'something, '34' => 'something else'] thì tôi cần tính 35 để thêm một phần tử mới vào mảng có khóa cao hơn bất kỳ của những người khác. Trong trường hợp một mảng trống, tôi cần 1 làm khóa khả dụng tiếp theo.

Đây là giải pháp đã hoạt động:

    $highest = 0;
    foreach($data as $idx=>$dummy)
    {
        if($idx > $highest)$highest=$idx;
    }
    $highest++;

Nó sẽ hoạt động trong mọi trường hợp, mảng trống hoặc không. Nếu bạn chỉ cần tìm khóa cao nhất chứ không phải khóa cao nhất + 1, hãy xóa dòng cuối cùng. Sau đó, bạn sẽ nhận được giá trị 0 nếu mảng trống.


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.