2012-01-04 34 views
84

Tôi có một mảng như sau:PHP - Nhận tên chủ chốt của giá trị mảng

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 phải tìm ra các chỉ số của $arr['firstStringName'] để tôi có thể lặp qua array_keys($arr) và trả về chuỗi chìa khóa 'firstStringName' theo chỉ mục của nó. Làm thế nào tôi có thể làm điều đó?

+0

bạn có thể xây dựng với một sử dụng trường hợp của những gì bạn đang cố gắng đạt được? –

Trả lời

168

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

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

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

+10

'array_filter()' có thể được sử dụng nếu bạn cần trả về tất cả các kết quả phù hợp thay vì chỉ kết quả phù hợp đầu tiên, vì nó giữ nguyên các khóa. –

+0

awesomeeeeeeeee –

+0

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

6

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

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

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

13

Nếu của tên động, sau đó bạn phải có cái gì đó như

$arr[$key] 

mà 'd có nghĩa là $ key chứa va lue của chì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, ví dụ:

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

sẽ cung cấp cho bạn

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

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

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

} 
26

Nếu tôi hiểu đúng, có thể không phải bạn chỉ cần sử dụng:

foreach($arr as $key=>$value) 
{ 
    echo $key; 
} 

Xem PHP manual

+0

Đã chỉnh sửa. Cảm ơn Mark! – rwb

+0

Tôi nghĩ anh ấy đang tìm kiếm hàm array_search php - http://php.net/manual/en/function.array-search.php – Junior

2

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

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

bạn có thể sử dụng chức năng then chốt của php để có được những tên chủ chốt:

<?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 - Manual

2

Dưới đây là một tùy chọn

$array = [1=>'one', 2=>'two', 3=>'there']; 
$array = array_flip($array); 
echo $array['one']; 
Các vấn đề liên quan