2012-02-25 35 views
8

Tôi thích thực hiện tìm kiếm trên một mảng và trả về tất cả các giá trị khi tìm thấy kết quả phù hợp. Khóa [name] trong mảng là những gì tôi đang thực hiện tìm kiếm.Tìm kiếm mảng và trả về tất cả các khóa và giá trị khi kết hợp được tìm thấy

Array (
[0] => Array 
    (
     [id] => 20120100 
     [link] => www.janedoe.com 
     [name] => Jane Doe 
    ) 
[1] => Array 
    (
     [id] => 20120101 
     [link] => www.johndoe.com 
     [name] => John Doe 
    ) 
) 

Nếu tôi đã làm một tìm kiếm cho John Doe nó sẽ trở lại.

Array 
(
    [id] => 20120101 
    [link] => www.johndoe.com 
    [name] => John Doe 
) 

Sẽ dễ dàng hơn khi đổi tên mảng dựa trên những gì tôi đang tìm kiếm. Thay vì các mảng trên tôi cũng có thể tạo ra sau đây.

Array (
[Jane Doe] => Array 
    (
     [id] => 20120100 
     [link] => www.janedoe.com 
     [name] => Jane Doe 
    ) 
[John Doe] => Array 
    (
     [id] => 20120101 
     [link] => www.johndoe.com 
     [name] => John Doe 
    ) 
) 
+0

Bạn chạy nguy cơ có phím trùng lặp nếu bạn sử dụng tên cho chìa khóa của bạn. – BenOfTheNorth

+0

Tôi sẽ bỏ qua ý tưởng thứ hai và chỉ tìm kiếm mảng đầu tiên. – Tim

Trả lời

6
$filteredArray = 
array_filter($array, function($element) use($searchFor){ 
    return isset($element['name']) && $element['name'] == $searchFor; 
}); 

Yêu cầu PHP 5.3.x

+0

Ngắn và nhanh chóng và dễ thực hiện. Chính xác những gì tôi đang tìm kiếm. Cảm ơn nhiều! – Tim

1
function search_array($array, $name){ 
    foreach($array as $item){ 
     if (is_array($item) && isset($item['name'])){ 
      if ($item['name'] == $name){ // or other string comparison 
       return $item; 
      } 
     } 
    } 
    return FALSE; // or whatever else you'd like 
} 
+0

Đã có một hàm dựng sẵn 'mảng_search', http://docs.php.net/array_search ->' Lỗi nghiêm trọng: Không thể redeclare array_search() ' – VolkerK

+1

xấu của tôi, chỉ cần đặt tên cho nó một cái gì đó khác ... – scibuff

1

tôi muốn cung cấp một sự thay đổi bắt buộc phải trả lời scibuff (mà là xuất sắc). Nếu bạn không tìm kiếm một kết hợp chính xác, nhưng một chuỗi bên trong mảng ...

function array_search_x($array, $name){ 
    foreach($array as $item){ 
     if (is_array($item) && isset($item['name'])){ 
      if (strpos($item['name'], $name) !== false) { // changed this line 
       return $item; 
      } 
     } 
    } 
    return FALSE; // or whatever else you'd like 
} 

Gọi này với ...

$pc_ct = array_search_x($your_array_name, 'your_string_here'); 
Các vấn đề liên quan