将PHP变量转换为数组 - 与"extract"相反

10

PHP有一个叫做extract的函数,可以将以下形式的数组转换为变量:

$array = array(
 'var1' => 1,
 'var2' => 2
);

收件人:

$var1 = 1;
$var2 = 2;

现在,我需要相反的情况,我有几个变量:

$var3 = 'test';
$test = 'another';
$datax = 1;

需要进行以下处理:

$array = array(
 'var3' => 'test',
 'test' => 'another',
 'datax' => 1
);

PHP 里有类似这样的东西吗?


1
如果这些是全局范围的,您已经在 $GLOBALS['test']$GLOBALS['var3'] 中拥有它了。$GLOBALS 参考 - Michael Berkowski
3
手册页面上写着 extract 函数是“紧凑的”(compact)。为什么你没有找到呢? - Gordon
正确答案应该是“创建一个包含属性var3、test和datax的类”,但不幸的是在SO的角度来看,这不会成为你问题的答案。 - CodeCaster
(对于初学者来说)不,这个特定问题的“正确”答案——即不带有个人观点或“聪明”,假设不存在实际存在的各种背景条件……——绝对不是“创建一个类”,也不涉及任何其他概念或复杂性进入问题空间,这些概念和复杂性既没有被要求也不必要。这与SO无关(但与奥卡姆剃刀和一般概念卫生有关)。 (如果问题或上下文涉及架构、OOP或编码最佳实践等,则CodeCaster会有一点。) - Sz.
4个回答

24

4

like this

$preDefined = (get_defined_vars());
$var3 = 'test';
$test = 'another';
$datax = "1";
$newDefined = array_diff(get_defined_vars(), $preDefined);
print_r($newDefined);

2

1

你必须非常确定你想要这样做(它会自动包含全局范围内的内容),但是你可以使用

$my_vars = get_defined_vars();

如果您想让它更加有选择性,可以像这样进行过滤:
$my_vars = pack_vars(get_defined_vars())

function pack_vars ($defined_vars)
{
    $packed = array();
    $ignored = array('dont_use_this', 'ignored_var', 'ignore_this_too');

    foreach ($defined_vars AS $key => $value)
    {
        if (!in_array($key, $ignored))
        {
            $packed[$key] = $value;
        }
    }
    return $packed;
}

在函数内部,get_defined_vars() 函数仅返回函数中可用的变量。我之前使用过一些框架,这些框架期望从控制器返回一个数组。这个函数非常有用。在使用它之前,请记得取消任何不需要的变量,比如数据库结果集。 - Anthony Scaife

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接