1. Hàm array_map() trong PHP

Hàm array_map() trong PHP là hàm giúp ta lặp lại giá trị trong mảng. Nhưng việc lặp lại ở đây là lặp lại trong một hàm callback do người dùng truyền vào thêm ý muốn để hàm callback này tác động đến từng phần tử trong mảng được truyền vào. Ta cũng có thể truyền vào bao nhiêu mảng tùy thích. Lúc này hàm callback sẽ coi những phần tử của mảng như là những tham số của nó và lặp lại đến khi không còn phần tử nào. Những tham số nào thỏa mãn hàm callback sẽ được truyền lại cho hàm array_map() xử lý. Cuối cùng giá trị trả về sẽ là một mảng với giá trị mới khi đã được hàm sử đổi. Hàm này được giới thiệu và sử dụng từ phiên bản PHP 4.0.6

2. Cú pháp hàm array_map() trong PHP

Ta có cú pháp của hàm array_map() trong PHP là:

array_map($func, $array1, $array2 ...);

Trong đó :

  • $array1 , $array2 … là các mảng dữ liệu truyền vào để xử lý
  • $func là hàm do người dùng định nghĩa sẽ nhận và xử lý các phần tử truyền vào là các phần tử của các mảng $array1 , $array2
  • Tham số $func là bắt buộc. Cùng với đó bắt buộc phải truyền vào ít nhất một mảng để xử lý.

Hàm array_map() trả về một mảng chứa kết quả phù hợp sau khi áp dụng hàm callback với giá trị của mảng thỏa mãn. Số lượng tham số mà hàm callback chấp nhận phải khớp với số mảng truyền vào hàm array_map() . Những mảng dư thừa sẽ bị bỏ qua. Một ArgumentCountError sẽ được ném ra nếu ta cung cấp không đủ số lượng đối số. Nhưng nếu ta chỉ cung cấp mảng đầu vào (với giá trị $funcnull ) thì hàm array_map() sẽ chỉ trả về mảng đầu vào.

Mảng mới sẽ giữ nguyên key của mảng ban đầu. Nhưng nếu có nhiều hơn một mảng được truyền vào thì các key của mảng mới sẽ là các key theo số nguyên tuần tự ( 0 , 1 , 2 , 3 , … )

Ví dụ: tạo một mảng mới bằng cách nhân giá trị trong mảng cũ với chính nó

<?php
function myfunction($num)
{
  return($num*$num);
}

$a=array(1,2,3,4,5);
echo "<pre>";
print_r(array_map("myfunction",$a));
?>

Kết quả

Array
(
    [0] => 1
    [1] => 4
    [2] => 9
    [3] => 16
    [4] => 25
)

Ở đây ta truyền vào một hàm khá đơn giản với việc sử dụng phần tử của mảng đầu vào nhân với chính nó ( $num*$num ) . Và kết quả ta thu được một mảng mới như trên.

3. Ví dụ về hàm array_map() trong PHP

Ví dụ 1: loại bỏ những phần tử chỉ định trong mảng

<?php
function myfunction($v)
{
if ($v==="XML")
  {
  return "PHP";
  }
return $v;
}

$a=array("Java","XML","Python","HTML","XML");
echo "<pre>";
print_r(array_map("myfunction",$a));
?>

Kết quả

Array
(
    [0] => Java
    [1] => PHP
    [2] => Python
    [3] => HTML
    [4] => PHP
)

Ở đây ta đã thay thế toàn bộ value là “XML” bằng “PHP” . Đây cũng là một ví dụ khá đơn giản các bạn có thể tham khảo.

Ví dụ 2: tạo một mảng mới từ những mảng cũ

<?php
$a = array(1, 2, 3);
$b = array("PHP", "Java", "Python","HTML");
$c = array(11, 12, 13, 14, 15);

$result = array_map(null, $a, $b, $c);

echo "<pre>";
print_r($result);
?>

Kết quả

Array
(
    [0] => Array
        (
            [0] => 1
            [1] => PHP
            [2] => 11
        )

    [1] => Array
        (
            [0] => 2
            [1] => Java
            [2] => 12
        )

    [2] => Array
        (
            [0] => 3
            [1] => Python
            [2] => 13
        )

    [3] => Array
        (
            [0] => 
            [1] => HTML
            [2] => 14
        )

    [4] => Array
        (
            [0] => 
            [1] => 
            [2] => 15
        )

)

Với ví dụ này thì mình đã truyền hàm callbacknull ( nghĩa là không truyền gì vào) . Từ đây kết quả trả về một mảng mới là sự kết hợp của 3 mảng cho trước. Cách lấy keyvalue của mảng mới như thế nào các bạn có thểm thao khảo ở phần kết quả nhé.

Ví dụ 3: chuyển đổi tất cả giá trị trong mảng thành chữ in hoa

<?php
function myfunction($v) 
{
$v=strtoupper($v);
  return $v;
}

$a=array("PHP" => "ba", "Java" => "bốn","Python" => "năm", "HTML" => "sáu");
echo "<pre>";
print_r(array_map("myfunction",$a));
?>

Kết quả

Array
(
    [PHP] => BA
    [Java] => BốN
    [Python] => NăM
    [HTML] => SáU
)

Ở đây ta sử dụng một hàm có sẵn trong PHP là strtoupper() để chuyển đổi thành chữ hoa. Kết quả là mảng mới được viết hoa toàn bộ keyvalue . Và các bạn có thể thấy các key đều được giữ nguyên so với mảng ban đầu.