Full-stack Frontend, Lập trình WordPress, Snippets

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

Điểm bài viết
[Tổng cộng: 0 Trung bình: 0]

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

0 0 đánh giá
Đánh giá bài viết