2010-08-11 35 views
6

Tôi đã viết hàm này để nhận một tập con của một mảng. Có php có được xây dựng trong chức năng này. Tôi không thể tìm thấy một trong các tài liệu. Có vẻ như một sự lãng phí nếu tôi đang phát minh lại bánh xe.Lấy một tập hợp con của một mảng dựa trên một dãy các phím

function array_subset($array, $keys) { 
    $result = array(); 
    foreach($keys as $key){ 
     $result[$key] = $array[$key]; 
    } 
    return $result; 
} 
+0

Có thể trùng lặp của [hàm mảng PHP trả về tập hợp con cho các khóa đã cho] (https://stackoverflow.com/questions/12543361/php-array-function-that-returns-a-subset-for-given-keys) –

Trả lời

10

array_diff_keyarray_intersect_key có lẽ là những gì bạn muốn.

+1

Tên hàm là số ít. http://www.php.net/manual/en/ref.array.php PHP cần dọn dẹp các quy ước đặt tên của họ! – Keyo

+1

Khi bạn ánh xạ các khóa trong mảng liên kết để tra cứu bảng giá trị trong mảng không liên kết, bạn có thể sử dụng 'array_flip' trên một đối số để đảm bảo rằng giao lộ/khác biệt dựa trên cả hai khóa hoặc cả hai giá trị, không một kết hợp của một hoặc khác. – danronmoon

4

Tôi luôn muốn điều này. Giống như phiên bản PHP của pick của Underscore.

Nó xấu xí và phản trực giác, nhưng những gì đôi khi tôi làm được điều này (Tôi nghĩ rằng đây có thể là những gì prodigitalson đã nhận được tại):

$a = ['foo'=>'bar', 'zam'=>'baz', 'zoo'=>'doo']; 

// Extract foo and zoo but not zam 
print_r(array_intersect_key($a, array_flip(['foo', 'zoo']))); 
/* 
Array 
(
    [foo] => bar 
    [zoo] => doo 
) 
*/ 

array_intersect_key trả về tất cả các yếu tố của đối số đầu tiên có phím có mặt trong đối số thứ 2 (và tất cả các đối số tiếp theo, nếu có). Nhưng, vì nó so sánh các phím với các phím, tôi sử dụng array_flip để thuận tiện. Tôi cũng có thể chỉ sử dụng ['foo' => null, 'zoo' => null] nhưng đó thậm chí còn xấu hơn.

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