2012-04-22 44 views
27

Tôi có một mẫu chung mà chắc chắn phải có một hàm mảng dựng sẵn trong PHP để xử lý nhưng không thể nhìn thấy nó.Lấy phần tử cụ thể từ mỗi mảng phụ

Tôi có nhiều mảng như sau:

$testArray = array (
    'subArray1' => array(
     'key1' => "Sub array 1 value 1", 
     'key2' => "Sub array 1 value 1" 
    ), 
    'subArray2' => array(
     'key1' => "Sub array 2 value 1", 
     'key2' => "Sub array 2 value 2" 
    ) 
); 

tôi cần phải nhận được key1 giá trị từ mỗi mảng con, trong đó có thể có bất kỳ số.

Tôi luôn kết thúc việc lặp qua từng mảng để nhận được các giá trị bắt buộc, nhưng tôi chắc chắn phải có một cách dễ dàng hơn, hiệu quả hơn để xử lý việc này.

Tôi hiện đang sử dụng foreach đơn giản sau đây để phân tích các mảng:

$preparedSubs = array(); 

foreach($testArray as $subArray) { 
    $preparedSubs[] = $subArray['key1']; 
} 

Đó là càng ngắn càng tôi có thể làm điều đó, nhưng như tôi đã nói tôi chắc chắn rằng có một cấu trúc PHP mà sẽ xử lý này tốt hơn.

+0

Bạn muốn lấy giá trị key1 từ mỗi subArray và lưu nó vào một mảng khác? –

+0

@Rohan - tốt hơn là giá trị thuộc khóa đó, hoặc cả khóa và giá trị cùng nhau. Ill post foreach vòng lặp im sử dụng hiện tại –

Trả lời

38

Trước khi PHP 5.5, đây sẽ là giải pháp hiệu quả nhất:

$key = 'key1'; 

$output = array_map(function($item) use ($key) { 
    return $item[$key]; 
}, $testArray); 

Tính đến PHP 5.5, hiện nay là một chức năng array_column cho điều này (xem COil's answer).

+5

Lưu ý: [PHP đóng cửa] (http://php.net/manual/en/class.closure.php) được hỗ trợ từ php 5.3, vì vậy phương pháp này sẽ ok từ 5.3 và không cần thiết sau 5.5 – Andron

+0

Dưới đây là câu trả lời cũng hoạt động :) đơn giản hơn nhiều Cảm ơn bạn – BlackBurn027

+1

Câu hỏi này đã được hỏi trước khi bản phát hành PHP 5.5 được phát hành. Tôi đã cập nhật câu hỏi của mình để phản ánh rằng khi câu trả lời của COIL được thêm 3 năm sau :-) – cmbuckley

20

Tính đến PHP 5,5 bạn có thể sử dụng array_column() chức năng:

$key = 'key1'; 

$testArray = array (
    'subArray1' => array(
     'key1' => "Sub array 1 value 1", 
     'key2' => "Sub array 1 value 2" 
    ), 
    'subArray2' => array(
     'key1' => "Sub array 2 value 1", 
     'key2' => "Sub array 2 value 2" 
    ) 
); 

$output = array_column($testArray, $key); 
var_dump($output); 

Will đầu ra:

array(2) { 
    [0]=> 
    string(19) "Sub array 1 value 1" 
    [1]=> 
    string(19) "Sub array 2 value 1" 
} 

Sự khác biệt duy nhất có câu trả lời được chấp nhận là bạn bị mất tên chính gốc, nhưng tôi nghĩ rằng đây không phải là vấn đề trong trường hợp của bạn.

+5

+1 cho hàm gốc mới. Bạn có thể giữ các khóa ban đầu với 'array_combine (array_keys ($ testArray), mảng_column ($ testArray, $ key))'. – cmbuckley

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