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
Sử dụng Array phức tạp với array_map
Giám đốc tại Công ty CP CODE TỐT. Quản lý ngôn ngữ bản địa tiếng Việt tại WordPress. Là tác giả chính tại codetot.net, Khôi muốn ghi lại một sốvấn đề kỹ thuật trong quá trình phát triển các dự án website với khách hàng.