PHP - Associative Array

Nếu mỗi phần tử trong một mảng PHP là một cặp khóa-giá trị, thì mảng như vậy được gọi là một __MẢNG ĐỊNH DANH__ (associative array). Trong loại mảng này, mỗi giá trị được xác định bởi khóa liên kết của nó chứ không phải là một chỉ số.

  • Mảng liên kết được sử dụng để triển khai các cấu trúc dữ liệu như từ điển, bản đồ, cây, v.v.

  • Trong PHP, ký hiệu "=>" được sử dụng để thiết lập mối liên kết giữa một khóa và giá trị của nó.

How to Declare an Associative Array in PHP?

Cả hai phương pháp khai báo một mảng – hàm array() và cú pháp dấu ngoặc vuông – đều có thể được sử dụng.

$arr1 = array(
   "Maharashtra"=>"Mumbai", 
   "Telangana"=>"Hyderabad", 
   "UP"=>"Lucknow", 
   "Tamilnadu"=>"Chennai"
);

$arr2 = ["Maharashtra"=>"Mumbai", 
   "Telangana"=>"Hyderabad", 
   "UP"=>"Lucknow", 
   "Tamilnadu"=>"Chennai"];

Nếu chúng ta gọi hàm var_dump(), cả hai mảng trên sẽ hiển thị cấu trúc tương tự.

array(4) {
   ["Maharashtra"]=>
   string(6) "Mumbai"
   ["Telangana"]=>
   string(9) "Hyderabad
   ["UP"]=>
   string(7) "Lucknow"
   ["Tamilnadu"]=>
   string(7) "Chennai"
}

Phần key của mỗi phần tử trong một mảng liên kết có thể là bất kỳ số nào (số nguyên, số thực hoặc Boolean), hoặc một chuỗi. Phần value có thể thuộc bất kỳ loại nào. Tuy nhiên, khóa số thực sẽ được chuyển đổi thành số nguyên. Vì vậy, một giá trị Boolean true/false được sử dụng như "1" hoặc "0" làm khóa.

Example

Hãy xem xét ví dụ sau đây −

<?php
   $arr1 = array(
      10=>"hello",
      5.75=>"world",
      -5=>"foo",
      false=>"bar"
   );
   var_dump($arr1);     
?>

Nó sẽ tạo ra output

array(4) {
  [10]=>
  string(5) "hello"
  [5]=>
  string(5) "world"
  [-5]=>
  string(3) "foo"
  [0]=>
  string(3) "bar"
}

Lưu ý rằng khóa 5.75 được làm tròn thành 5, và khóa "true" được phản ánh là "0". Nếu cùng một khóa xuất hiện nhiều hơn một lần trong một mảng, cặp khóa-giá trị xuất hiện sau cùng sẽ được giữ lại, loại bỏ sự liên kết của khóa với giá trị trước đó.

PHP nội bộ coi một mảng chỉ mục (indexed array) cũng như một mảng liên kết (associative array), trong đó chỉ mục thực sự là khóa của giá trị. Điều này có nghĩa là giá trị tại chỉ mục 0 có khóa bằng "0", và cứ như vậy. Việc sử dụng var_dump() trên một mảng chỉ mục cũng làm nổi bật đặc điểm này của một mảng trong PHP.

Iterating a PHP Associative Array

Một vòng lặp foreach là dễ nhất và lý tưởng để lặp qua một mảng liên kết, mặc dù bất kỳ loại vòng lặp nào khác cũng có thể được sử dụng với một số điều chỉnh.

Example

Hãy xem xét việc triển khai vòng lặp foreach , với mỗi cặp khóa giá trị được giải nén thành hai biến.

<?php
   $capitals = array(
      "Maharashtra"=>"Mumbai", 
      "Telangana"=>"Hyderabad", 
      "UP"=>"Lucknow", 
      "Tamilnadu"=>"Chennai"
   );

   foreach ($capitals as $k=>$v) {
      echo "Capital of $k is $v \n";
   }
?>

Nó sẽ tạo ra output

Capital of Maharashtra is Mumbai
Capital of Telangana is Hyderabad
Capital of UP is Lucknow
Capital of Tamilnadu is Chennai

Có một cách khác để sử dụng vòng lặp foreach trong PHP, nơi mỗi phần tử được lưu trữ trong một biến. Sau đó, chúng ta có thể tách phần khóa và giá trị bằng cách sử dụng array_search() và sử dụng chúng trong thân vòng lặp.

<?php
   $capitals = array(
      "Maharashtra"=>"Mumbai", 
      "Telangana"=>"Hyderabad", 
      "UP"=>"Lucknow", 
      "Tamilnadu"=>"Chennai"
   );

   foreach ($capitals as $pair) {
      $cap = array_search($pair, $capitals);         
      echo "Capital of $cap is $capitals[$cap] \n";
   }
?>

Nó sẽ tạo ra output

Capital of Maharashtra is Mumbai 
Capital of Telangana is Hyderabad 
Capital of UP is Lucknow 
Capital of Tamilnadu is Chennai

Để sử dụng vòng lặp for, while hoặc do-while , chúng ta phải đầu tiên lấy mảng tất cả các khóa (sử dụng array_keys()), tìm kích thước và sử dụng nó làm điều kiện kiểm tra trong cú pháp vòng lặp.

Example

Dưới đây là cách chúng ta có thể sử dụng một vòng lặp for để duyệt qua một mảng liên kết −

<?php
   $capitals = array(
      "Maharashtra"=>"Mumbai", 
      "Telangana"=>"Hyderabad", 
      "UP"=>"Lucknow",
      "Tamilnadu"=>"Chennai"
   );
   $keys=array_keys($capitals);

   for ($i=0; $i<count($keys); $i++){
      $cap = $keys[$i];
      echo "Capital of $cap is $capitals[$cap] \n";
   }
?>

Nó sẽ tạo ra output

Capital of Maharashtra is Mumbai 
Capital of Telangana is Hyderabad 
Capital of UP is Lucknow 
Capital of Tamilnadu is Chennai

Accessing the Value with its Key

Trong một mảng liên kết, khóa là định danh của giá trị thay vì chỉ số. Do đó, để lấy giá trị liên quan đến một khóa nhất định, hãy sử dụng cú pháp $arr[key]. Cú pháp này cũng có thể được sử dụng để cập nhật giá trị của một khóa nhất định.

Example

Trong đoạn mã sau, một mảng liên kết $arr1 được khai báo. Một mảng khác $arr2 được tạo ra để lưu trữ từng cặp từ $arr1 với giá trị của mỗi khóa được nhân đôi.

<?php
   $arr1 = array("a"=>10, "b"=>20, "c"=>30, "d"=>40);
   foreach ($arr1 as $k=>$v){
      $arr2[$k] = $v*2;
   }
   print_r($arr2);
?>

Nó sẽ tạo ra output

Array
(
   [a] => 20
   [b] => 40
   [c] => 60
   [d] => 80
)

Hàm print_r() được sử dụng ở đây hiển thị dữ liệu được lưu trữ trong mảng theo dạng dễ hiểu cho con người.