php变量到数组-与“相反”;摘录;
PHP有一个函数extract,它将转换如下数组: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
$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()只返回函数中可用的变量。我以前使用过一些框架,它们期望从控制器返回一个数组。这个函数很有用。请记住,在使用任何不需要的变量(例如数据库结果集)之前,请先取消设置这些变量。