Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php变量到数组-与“相反”;摘录;_Php_Arrays_Extract - Fatal编程技术网

php变量到数组-与“相反”;摘录;

php变量到数组-与“相反”;摘录;,php,arrays,extract,Php,Arrays,Extract,PHP有一个函数extract,它将转换如下数组: $array = array( 'var1' => 1, 'var2' => 2 ); $my_vars = pack_vars(get_defined_vars()) function pack_vars ($defined_vars) { $packed = array(); $ignored = array('dont_use_this', 'ignored_var', 'ignore_this_too

PHP有一个函数extract,它将转换如下数组:

$array = array(
 'var1' => 1,
 'var2' => 2
);
$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;
}
致:

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

$var3 = 'test';
$test = 'another';
$datax = 1;
这需要:

$array = array(
 'var3' => 'test',
 'test' => 'another',
 'datax' => 1
);
PHP中有类似的东西吗

$array = get_defined_vars()
请参见您可以使用
compact()
来实现这一点

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

参考资料:

您必须确实确定要这样做(它自动包括全局范围内的内容),但您可以使用

$my_vars = get_defined_vars();
如果你想让它更具选择性,你可以像这样过滤它:

$array = array(
 'var1' => 1,
 'var2' => 2
);
$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;
}
像这样

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

如果这些是全局范围,那么您已经在
$GLOBALS['test']中拥有了它$GLOBALS['var3']
右边写着
compact
。为什么你没有找到它?正确的答案应该是“创建一个包含属性var3、test和datax的类”,但不幸的是,从这样的角度来看,这并不能回答你的问题。(对于在这里游荡的初学者来说。)不,这是这个特定问题的“正确”答案——也就是说,没有自以为是,或者说“聪明”,假设实际不存在的各种背景条件…——绝对不要“创建一个类”,也不要将任何其他概念或复杂性引入到问题空间中,这些概念或复杂性既不需要也不需要。这与此无关(但与奥卡姆剃须刀和一般概念卫生有关)。(如果问题或上下文是关于体系结构、OOP或编码最佳实践等的,CodeCaster会有一个观点。)在函数内部,get_defined_vars()只返回函数中可用的变量。我以前使用过一些框架,它们期望从控制器返回一个数组。这个函数很有用。请记住,在使用任何不需要的变量(例如数据库结果集)之前,请先取消设置这些变量。