2011-09-18 50 views
27

Ok, vì vậy tôi cần lấy vị trí của 'blah' trong mảng này (vị trí sẽ không phải lúc nào cũng giống nhau). Ví dụ:Cách lấy vị trí của một khóa trong một mảng

$array = (
    'a' => $some_content, 
    'b' => $more_content, 
    'c' => array($content), 
    'blah' => array($stuff), 
    'd' => $info, 
    'e' => $more_info, 
); 

Vì vậy, tôi muốn có thể trả về số lượng khóa 'blah' nằm trong mảng. Trong trường hợp này, nó sẽ trở lại 3. Làm thế nào tôi có thể làm điều này một cách nhanh chóng? Và không ảnh hưởng đến mảng mảng $ nào cả.

Trả lời

62
$i = array_search('blah', array_keys($array)); 
+0

Cảm ơn rất nhiều. Tôi nghĩ ban đầu bạn đã có các thông số bị đảo ngược, nhưng bạn đã sửa nó. Đã cố gắng với cách khác, và nhận được lỗi. Nhưng bây giờ nó hoàn hảo. Cảm ơn :) – SoLoGHoST

+0

Đôi khi câu trả lời rất rõ ràng… :) –

-3

Người dùng array_search (doc). Cụ thể, `$ index = array_search ('blah', $ mảng)

+3

Không! Giống như tài liệu nói: Tìm kiếm mảng cho một giá trị ** đã cho **, không phải là ** khóa ** khi người dùng hỏi. –

0

$keys=array_keys($array); sẽ cung cấp cho bạn một mảng chứa các phím của $array

Vì vậy, array_search('blah', $keys); sẽ cung cấp cho bạn những chỉ số của blah trong $keys và do đó, $array

3

Nếu bạn biết chìa khóa tồn tại:

PHP 5.4 (Demo):

echo array_flip(array_keys($array))['blah']; 

PHP 5.3:

$keys = array_flip(array_keys($array)); 
echo $keys['blah']; 

Nếu bạn không biết chìa khóa tồn tại, bạn có thể kiểm tra với isset:

$keys = array_flip(array_keys($array)); 
echo isset($keys['blah']) ? $keys['blah'] : 'not found' ; 

Đây là chỉ đơn thuần như array_search nhưng làm cho việc sử dụng bản đồ mà đã tồn tại bên trong bất kỳ mảng nào. Tôi không thể nói nếu nó thực sự tốt hơn so với array_search, điều này có thể phụ thuộc vào kịch bản, do đó, chỉ cần một thay thế.

+0

Vâng, tôi biết thực tế là chìa khóa sẽ luôn tồn tại! Trong trường hợp đó, điều này sẽ nhanh hơn việc sử dụng 'array_search'? – SoLoGHoST

+0

Hãy để tôi trả lời theo cách này: Miễn là 'mảng_flip' nhanh hơn' mảng_search', nó là :). Chính tra cứu chính nhanh hơn 'array_search'. – hakre

+0

Tôi thích ý tưởng, nhưng array_search thực sự nhanh hơn theo các bài kiểm tra của tôi (ít nhất là trong PHP 5.3). –

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