1. Hàm array_fill_keys() trong PHP

Hàm array_fill_keys() trong PHP giúp ta tạo ra một mảng mới dựa vào mảng cũ. Dựa vào mảng cũ mà ta muốn sử dụng kèm theo đó sẽ là một giá trị do chính người dùng truyền vào theo ý muốn. Mảng mới được tạo ra sẽ lấy toàn bộ value của mảng cũ làm key và giá trị được truyền vào sẽ được sử dụng làm value . Hàm array_fill_keys() được giới thiệu và sử dụng từ phiên bản PHP 5.2

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

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

array array_fill_keys ( $keys, $value )

Hàm này chấp nhận hai tham số keysvalue để có mặt trong mảng mới trong đó:

  • $keys : tham số này chính là mảng cũ mà ta muốn sử dụng trong mảng mới. Nó sẽ lấy toàn bộ value của mảng cũ này và sử dụng làm key cho mảng mới. Nếu mảng $keys này chứa bất kỳ giá trị nào không phù hợp thì nó sẽ được chuyển đổi thành một chuỗi và được sử dụng.
  • $value : là giá trị mà người dùng muốn truyền vào làm value của mảng mới. Nó có thể là giá trị đơn lẻ hay danh sách các giá trị. Thậm chí nó có thể là một mảng. Nếu như nó là một mảng thì mảng mới sẽ là một mảng đa chiều trong đó mỗi phần tử trong mảng $keys sẽ là một key và mọi key trong mảng mới sẽ có mảng $value là một giá trị

Ví dụ:

<?php
$keys=array("a","b","c","d");
$a1=array_fill_keys($keys,"PHP");
print_r($a1);
?>

Kết quả

Array ( [a] => PHP [b] => PHP [c] => PHP [d] => PHP )

Ở đây mảng cũ mà ta muốn sử dụng trong mảng mới là $keys và PHP là giá trị ta muốn truyền vào và sử dụng làm value cho mảng mới.

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

Ví dụ 1:

<?php

$keys = array('PHP', 25, 560, 'Java');
$a = array_fill_keys($keys, 'laptrinhtudau');

echo '<pre>';
var_dump($a);

?>

Kết quả

array(4) {
  ["PHP"]=>
  string(13) "laptrinhtudau"
  [25]=>
  string(13) "laptrinhtudau"
  [560]=>
  string(13) "laptrinhtudau"
  ["Java"]=>
  string(13) "laptrinhtudau"
}

Ví dụ 2:

<?php  
$keys = array(1, 2, 3, 4, 5, 'PHP');  
$result = array_fill_keys($keys, '1000');  
echo '<pre>';
var_dump($result);  
?>

Kết quả

array(6) {
  [1]=>
  string(4) "1000"
  [2]=>
  string(4) "1000"
  [3]=>
  string(4) "1000"
  [4]=>
  string(4) "1000"
  [5]=>
  string(4) "1000"
  ["PHP"]=>
  string(4) "1000"
}

Ví dụ 3:

<?php  
$keys = array('PHP', 'Java', 'Python', 'HTML');  
$value = array('Program', 'laptrinhtudau');  
$result = array_fill_keys($keys, $value); 
echo '<pre>';
var_dump($result);  
 ?>

Kết quả

array(4) {
  ["PHP"]=>
  array(2) {
    [0]=>
    string(7) "Program"
    [1]=>
    string(13) "laptrinhtudau"
  }
  ["Java"]=>
  array(2) {
    [0]=>
    string(7) "Program"
    [1]=>
    string(13) "laptrinhtudau"
  }
  ["Python"]=>
  array(2) {
    [0]=>
    string(7) "Program"
    [1]=>
    string(13) "laptrinhtudau"
  }
  ["HTML"]=>
  array(2) {
    [0]=>
    string(7) "Program"
    [1]=>
    string(13) "laptrinhtudau"
  }
}

Ở đây giá trị do người dùng truyền vào chính là một mảng. Vì vậy mà khi sử dụng hàm array_fill_keys() sẽ tạo ra một mảng đa chiều mới.

Ví dụ 4:

<?php
$b = array_fill(-2, 4, 'PHP');//Thông thường bạn sẽ không muốn như thế này !!
$c = array_fill_keys(range(-2,1),'PHP');// Sử dụng hàm range để INDEX của bạn đúng theo trình tự !!
echo '<pre>';
print_r($b);
echo '<pre>';
print_r($c);
?>

Kết quả

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

Như ta đã tìm hiểu ở bài trước, khi sử dụng hàm array_fill() với bắt đầu là một số âm thì key của mảng mới bắt đầu là số âm đó tiếp theo sau sẽ là 0,1,2,3,… luôn mà bỏ qua giá trị âm đằng sau. Đôi khi ta lại không muốn điều này mà muốn giá trị âm liền nhau đến hết. Ta có thể sử dụng hàm array_fill_keys() kết hợp với hàm range() để index của hàm mới theo đúng trình tự mà ta muốn.