Mẹo PHP: Sử dụng array_map với PHP Array phức tạp

Rate this post

Với một tình huống cần xử lý PHP array và thay thế hoặc thêm các thành phần mới cho mỗi item từ PHP Array, bạn sẽ làm như thế nào?

Trong bài này, ta sẽ cùng giải quyết một bài toán mà rất dễ gặp trong các project với CMS như WordPress. Đó là bạn cần truy cập vào một list array, thay thế hoặc thêm bớt các thành phần cho mỗi item.

Ví dụ với PHP Array

Hãy giả sử ta có một query dữ liệu như thế này nhé:

$args = array(
  'numberposts' => 3,
  'post_status' => 'publish',
  'post_type' => 'news'
);
$post_list = get_posts($args);
$list = array();

foreach($post_list as $item) {
  $list[] = array(
    'title' => $item->post_title,
    'description' => $item->post_excerpt
  );
}

Vấn đề xử lý dữ liệu

Tình huống lý tưởng là ta đang trong vòng lặp và có thể gọi thêm gì đó bạn muốn, ví dụ:

foreach($post_list as $item) {
  $list[] = array(
    'title' => $item->post_title,
    'description' => $item->post_excerpt,
    'image' => get_post_thumbnail_id($item->ID) // Đây là biến ta cho thêm vào
  );
}

Nhưng đời không như mơ…

Với tình huống vòng loop này không do chúng ta tạo ra, mà nó được thiết lập bởi một plugin khác. Khi đó bạn sẽ chỉ có thể xem kết quả là $list thì làm thế nào?

Kết quả xử lý

Khi đó, ta cần vận dụng kiến thức về PHP Array và sử dụng một trong các function có sẵn của PHP là array_map() một cách thông minh như sau:

$list = array_map( function($item) {
  $item['tag'] = __('News', 'codetot');
  $item['module'] = 'card-news'
}, $list);

Lưu ý là thao tác này phải thực hiện trước khi return $list nếu bạn đang ở trong function nhé.

Như vậy, kết quả khi bạn var_dump($list) sẽ chứa trong mỗi item cả tag và module như ví dụ ta vừa làm như trên.

Tài liệu tham khảo

PHP Array Map đơn giản

Sử dụng Array phức tạp với array_map

Viết một bình luận


Chuyên gia về Web
Bạn muốn làm việc với dịch vụ website do chúng tôi triển khai?
Gọi tư vấn 0982.90.4343
Chuyên gia về Web
Bài viết liên quan
Gọi file PHP trong WordPress

19/09/2023

Cài đặt và sử dụng WP-CLI trên môi trường Linux
Trên một số môi trường Hosting có thể cung cấp SSH hoặc Terminal access, song không có sẵn WP-CLI để...
Import database MySQL lớn trên môi trường Docker

06/08/2023

Import database MySQL lớn trên môi trường Docker
Mình sử dụng EasyPanel để quản lý các Docker và build môi trường app. Nay gặp tình huống phải import...

28/01/2023

Hướng dẫn cài đặt php extension mongodb trên Mac OS M1
Khi bạn muốn hỗ trợ MongoDB trên dòng Mac M1, phần cài đặt sẽ cần một chút lưu ý. Hướng...
Git

18/12/2022

Xử lý lỗi Git không thể tiến hành merge do merge.renamelimit
Khi bạn tiến hành merge nhánh phụ vào nhánh chính hoặc lên nhánh production, có thể xung đột xảy ra...