1. Hàm extract() trong PHP

Hàm extract() trong PHP được sử dụng để nhập các biến từ một mảng vào trong bảng biểu tượng hiện tại (current symbol table). Hay ta có thể hiểu nôm na một cách đơn giản là hàm extract() giúp ta chuyển đổi phần tử trong mảng thành một biến. Hàm sẽ sử dụng key của mảng làm tên biến và value tương ứng làm giá trị của biến. Hàm extract() cũng sẽ kiểm tra các key xem nó có phải là tên biến hợp lệ hay không. Với mỗi cặp keyvalue nó sẽ tạo một biến trong bảng ký tự hiện tại. Nó cũng kiểm tra sự xung đột với các biến hiện có trong bảng ký hiệu. Hàm extract() được giới thiệu và sử dụng từ phiên bản PHP 4.0

2. Cú pháp của hàm extract() trong PHP

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

extract($array, $extract_rule, $prefix)

Hàm extract() sẽ chấp nhận truyền vào 3 tham số trong đó :

  • $array : mảng đầu vào mà ta sẽ sử dụng. Tham số này là bắt buộc trong hàm
  • $extract_rule : kiểm tra tên biến không hợp lệ và xung đột với tên biến hiện có và đưa ra cách xử lý những tên biến không hợp lệ hay gây xung đột này. Tham số này là tùy chọn trong hàm
  • $prefix : chỉ định tiền tố khi xuất hiện sự trùng lặp biến. Tiền tố được tự động phân tách khỏi key của mảng bằng một ký tự gạch dưới. Ngoài ra, tham số này chỉ được yêu cầu khi tham số $extract_rule được đặt thành EXTR_PREFIX_SAME , EXTR_PREFIX_ALL , EXTR_PREFIX_INVALID hoặc EXTR_PREFIX_IF_EXISTS. Tham số này là tùy chọn trong hàm

Những giá trị có thể được đặt với $extract_rule :

  • EXTR_OVERWRITE − Mặc định. Nếu xung đột, biến hiện tại sẽ bị ghi đè
  • EXTR_SKIP − Nếu xung đột, biến hiện tại sẽ không bị ghi đè
  • EXTR_PREFIX_SAME − Nếu xung đột, biến hiện tại sẽ được cung cấp một $prefix
  • EXTR_PREFIX_ALL − Tất cả tên biến sẽ được cung cấp một $prefix
  • EXTR_PREFIX_INVALID − Chỉ các tên biến không hợp lệ hoặc tên biến giá trị số sẽ được cung cấp một $prefix
  • EXTR_IF_EXISTS − Chỉ ghi đè các biên đang tồn tại trong current symbol table, nếu không thì không làm gì cả
  • EXTR_PREFIX_IF_EXISTS − Chỉ thêm $prefix tới các biến nếu biến giống nhau tồn tại trong current symbol table
  • EXTR_REFS − Trích các biến như là tham chiếu. Các biến đã được import sẽ đang tham chiếu tới value của tham số mảng

Giá trị trả về của hàm extract() là một số nguyên và nó đại diện cho số biến được trích xuất hoặc nhập thành công từ mảng. Có nghĩa là hàm này sẽ trả về số lượng biến theo key trong mảng và $prefix đươc nhập thành công.

Ví dụ : gán giá trị của mảng cho các biến

<?php
$a = "laptrinhtudau";
$my_array = array("a" => "PHP","b" => "Java", "c" => "Python");
extract($my_array);
echo "\$a = $a; \$b = $b; \$c = $c";

?>

Kết quả

$a = PHP; $b = Java; $c = Python

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

Ví dụ 1:

<?php
$a = "laptrinhtudau";
$my_array = array("a" => "PHP", "b" => "Java", "c" => "Python");

extract($my_array, EXTR_PREFIX_SAME, "dup");

echo "\$a = $a; \$b = $b; \$c = $c; \$dup_a = $dup_a";
?>

Kết quả

$a = laptrinhtudau; $b = Java; $c = Python; $dup_a = PHP

Ta có $a không bị ghi đè vì chúng ta đã chỉ định EXTR_PREFIX_SAME , điều này dẫn đến việc tạo $dup_a . Nếu EXTR_SKIP được chỉ định, thì $dup_a thậm chí sẽ không được tạo. EXTR_OVERWRITE sẽ khiến $a có giá trị là “PHP”EXTR_PREFIX_ALL sẽ dẫn đến các biến mới được đặt tên là $dup_a , $dup_b$dup_c

Ví dụ 2:

<?php  
 $a = "sachin";  
 $my_array = array("a" => "tendulkar","b" => "virat", "c" => "ganguly");  
 extract($my_array);  
 echo $a;   
 echo $b;   
?>

Kết quả

tendulkarvirat

Ví dụ 3:

<?php  
    $info= array( );  
    $info['name']= "PHP";  
    $info['office']= "laptrinhtudau";  
    $info['city']= "hanoi";  
    $info['profile']= "LTTD";  
    extract($info);  
    echo $name;  
    echo $city;  
?>

Kết quả

PHPhanoi