ZetCode

PHP extract 函数

最后修改于 2025 年 3 月 13 日

PHP 的 extract 函数可以将数组中的变量导入到当前的符号表中。它能快速地从数组键值对创建变量,非常有用。

基本定义

extract 函数接收一个关联数组,并为每个键值对创建变量。变量名与数组键匹配。

语法:extract(array $array, int $flags = EXTR_OVERWRITE, string $prefix = ""): int。该函数返回成功导入的变量数量。

基本 extract 示例

此示例演示了 extract 的最简单用法,用于创建变量。

basic_extract.php
<?php

$userData = [
    'username' => 'johndoe',
    'email' => 'john@example.com',
    'age' => 30
];

extract($userData);

echo $username; 
echo $email;   
echo $age;     

此代码从数组键创建了三个变量。每个变量都保存了数组中的对应值。这些变量现在在当前作用域中可用。

使用 EXTR_PREFIX_ALL 标志

此示例展示了如何为所有提取的变量添加前缀以提高安全性。

prefix_extract.php
<?php

$config = [
    'host' => 'localhost',
    'port' => 3306,
    'dbname' => 'testdb'
];

extract($config, EXTR_PREFIX_ALL, 'db');

echo $db_host;    
echo $db_port;    
echo $db_dbname;  

EXTR_PREFIX_ALL 标志会将指定的前缀添加到所有变量名。这可以防止与现有变量发生命名冲突。

使用 EXTR_SKIP 处理冲突

演示了如何跳过会覆盖现有变量的变量。

skip_extract.php
<?php

$existingVar = 'original value';
$data = [
    'existingVar' => 'new value',
    'newVar' => 'some data'
];

extract($data, EXTR_SKIP);

echo $existingVar; 
echo $newVar;     

使用 EXTR_SKIP 时,该函数会跳过与现有变量名匹配的键。$existingVar 的原始值将被保留。

使用 EXTR_REFS 提取

展示了如何将变量提取为数组元素的引用。

refs_extract.php
<?php

$originalArray = [
    'color' => 'blue',
    'size' => 'medium'
];

extract($originalArray, EXTR_REFS);

$color = 'red'; // Modifies the original array

print_r($originalArray);

使用 EXTR_REFS 创建的变量引用原始数组元素。更改这些变量会修改原始数组。

复杂数组提取

演示了从复杂的嵌套数组结构中提取变量。

complex_extract.php
<?php

$userProfile = [
    'personal' => [
        'name' => 'Alice',
        'birthdate' => '1990-05-15'
    ],
    'account' => [
        'username' => 'alice123',
        'last_login' => '2023-04-01'
    ]
];

extract($userProfile['personal']);
extract($userProfile['account'], EXTR_PREFIX_ALL, 'acc');

echo $name;          
echo $birthdate;     
echo $acc_username;  
echo $acc_last_login; 

这展示了从嵌套数组中提取。我们直接提取个人数据,并为账户数据添加前缀,以避免这两个部分之间的命名冲突。

最佳实践

来源

PHP Extract 文档

本教程通过实际示例介绍了 PHP extract 函数,展示了其用于导入数组变量的用法。

作者

我叫 Jan Bodnar,是一名充满热情的程序员,拥有丰富的编程经验。我从 2007 年开始撰写编程文章。迄今为止,我已撰写了 1,400 多篇文章和 8 本电子书。我在编程教学方面拥有十多年的经验。

列出 所有 PHP 数组函数