PHP - Nhận tên khóa của giá trị mảng


157

Tôi có một mảng như sau:

function example() {
    /* some stuff here that pushes items with
        dynamically created key strings into an array */

    return array( // now lets pretend it returns the created array
        'firstStringName' => $whatEver,
        'secondStringName' => $somethingElse
    );
}

$arr = example();

// now I know that $arr contains $arr['firstStringName'];

Tôi cần tìm ra chỉ mục $arr['firstStringName']để tôi có thể lặp qua array_keys($arr)và trả về chuỗi khóa 'firstStringName'theo chỉ mục của nó. Làm thế nào tôi có thể làm điều đó?


Bạn có thể giải thích với trường hợp sử dụng những gì bạn đang cố gắng đạt được không?
nikc.org

Câu trả lời:


331

Nếu bạn có một giá trị và muốn tìm khóa, hãy sử dụng array_search()như thế này:

$arr = array ('first' => 'a', 'second' => 'b', );
$key = array_search ('a', $arr);

$keybây giờ sẽ chứa khóa cho giá trị 'a'(nghĩa là, 'first').


21
array_filter()có thể được sử dụng nếu bạn cần trả về tất cả các kết quả khớp thay vì chỉ kết quả khớp đầu tiên, vì nó bảo toàn các khóa.
Mike Lyons

5
Một cái gì đó tôi nghĩ đáng chú ý ở đây: giải pháp này không hiệu quả với tôi, cho đến khi tôi phát hiện ra rằng việc sắp xếp mảng (sort ($ Array)) sẽ loại bỏ các tên khóa và sử dụng các giá trị chỉ mục 0,1,2, v.v. Vì vậy, nếu bạn đang sắp xếp, hãy sử dụng asort (asort ($ Array)). Điều này duy trì các giá trị quan trọng. php.net/manual/en/function.asort.php
Rich701

63
key($arr);

sẽ trả về giá trị khóa cho phần tử mảng hiện tại

http://uk.php.net/manual/en/feft.key.php


@AnthonyRutledge Điều này sẽ chỉ trả về những gì con trỏ bên trong hiện đang "chỉ vào". Nếu chúng ta cần một tài liệu tham khảo khác, thì chúng ta nên sử dụng phương pháp zrvans, đặc biệt là tìm kiếm giá trị được yêu cầu.
Parapluie


18

Nếu tên đó là động, thì bạn phải có một cái gì đó như

$arr[$key]

điều đó có nghĩa là khóa $ chứa giá trị của khóa.

Bạn có thể sử dụng array_keys()để lấy TẤT CẢ các khóa của một mảng, vd

$arr = array('a' => 'b', 'c' => 'd')
$x = array_keys($arr);

sẽ cung cấp cho bạn

$x = array(0 => 'a', 1 => 'c');

16

Có, bạn có thể hiểu php là một trong số ít các ngôn ngữ cung cấp hỗ trợ như vậy ..

foreach($arr as $key=>$value)
{

}

Đây không phải là câu trả lời phù hợp theo tìm kiếm và tốn nhiều thời gian hơn .. Mã hóa kém hiệu quả hơn
Rishab

13

nếu bạn cần trả về một phần tử mảng có cùng giá trị, hãy sử dụng array_keys()hàm

$array = array('red' => 1, 'blue' => 1, 'green' => 2);
print_r(array_keys($array, 1));

11

Đây là một lựa chọn khác

$array = [1=>'one', 2=>'two', 3=>'there'];
$array = array_flip($array);
echo $array['one']; 

8

sử dụng array_keys()để có được một mảng của tất cả các khóa duy nhất.

Lưu ý rằng một mảng với các khóa được đặt tên như của bạn $arrcũng có thể được truy cập bằng các chỉ mục số, như $arr[0].

http://php.net/manual/en/feft.array-keys.php


4

bạn có thể sử dụng chức năng chính của php để lấy tên khóa:

<?php
    $array = array(
    'fruit1' => 'apple',
    'fruit2' => 'orange',
    'fruit3' => 'grape',
    'fruit4' => 'apple',
    'fruit5' => 'apple');

    // this cycle echoes all associative array
    // key where value equals "apple"
    while ($fruit_name = current($array)) {
      if ($fruit_name == 'apple') {
        echo key($array).'<br />';
      }
    next($array);
     }
?>

như ở đây: PHP: key - Hướng dẫn

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.