php 中如何取得变量名? 本帖最后由 u010200485 于 2014-03-11 12:27:23 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 $var_name = 'var_value';function get_variable_name(&$var, $scope = NULL) {if (NULL == $scope) { $scope = $GLOBALS;} $tmp = $var; $var = "tmp_exists_" . mt_rand(); $name = array_search($var, $scope, TRUE); $var = $tmp; return $name;}echo get_variable_name($var_name);//var_name取变量名做什么?这是小白为题么? 感谢解答,关键字$GLOBALS啊,今天又学到新东西了。我主要是想做一个带预设值下拉框的php函数,想直接给一个选项数组$select_arr,然后<select>标签的name就直接从‘select_arr’中把arr砍去,这样不用另外给标签名,可以少给一个变量,当然定制性强一点,要求array和<select>的命名要求就差一个'_arr',所以有这样的疑问,不知到是不是很愚钝,是不是有别的好办法。 感谢解答,关键字$GLOBALS啊,今天又学到新东西了。我主要是想做一个带预设值下拉框的php函数,想直接给一个选项数组$select_arr,然后<select>标签的name就直接从‘select_arr’中把arr砍去,这样不用另外给标签名,可以少给一个变量,当然定制性强一点,要求array和<select>的命名要求就差一个'_arr',所以有这样的疑问,不知到是不是很愚钝,是不是有别的好办法。不过仔细一看不太明白, $var = "tmp_exists_" . mt_rand(); $name = array_search($var, $scope, TRUE);这个是什么意思?我原来理解是在$scope中找原来的$var的值,但是 为什么要$var = "tmp_exists_" . mt_rand();呢?另外,如果有$scope中两个变量的值一样的话,貌似就搞混掉了。 是不是想取$var_name这个变量的值var_value 是,我不理解的是这一句干嘛用?$var = "tmp_exists_" . mt_rand(); function print_var_name($var) { foreach($GLOBALS as $var_name => $value) { if ($value === $var) { return $var_name; } } return false;}看看老外怎么说 忘了贴地址http://stackoverflow.com/questions/255312/how-to-get-a-variable-name-as-a-string-in-php 这样?$a = "var_name";$$a = "var_value";echo $a;echo $$a; 先有鸡还是先有蛋的问题。第一个问题 1楼 已经解答。$var = 'tmp_value_'.mt_rand(); $name = array_search($var, $scope, true);因为是根据值找已定义的变量,会存在相同变量值的情况。以上两句的作用就是解决这个问题的。解决方法:1.先将原来变量的值用一个临时变量保存2.然后把变量值修改为唯一的值(就是不可能有重复的值),再search,这就会找到唯一的变量名。3.把临时变量的值还原到原来变量因为是用&$var,地址引用,因此修改变量值后,都可以找到第二个问题,要做到的话,$argument_name只能用地址引用,例如这样就可以获取到 parameter_namefunction func_name(&$argument_name) { echo get_variable_name($argument_name);}$parameter_name = 'parameter_value';func_name($parameter_name);function get_variable_name(&$var, $scope=null){ $scope = $scope==null? $GLOBALS : $scope; $tmp = $var; $var = 'tmp_value_'.mt_rand(); $name = array_search($var, $scope, true); $var = $tmp; return $name; } 获取变量名干啥?都知道变量名了,还需要去获取吗?www.sdlydl.cn 问大侠们一个smarty section循环的问题 关于单标签 一个符号:: 网站计数器 求一正则替换 在FTP中怎么不能删除文件?请教 LoadModule php4_module "d:/php4/sapi/php4apache2.dll" 报错 如何判断一个字符串是不是另一个字符串的子串? 传wps文件出错? 从C++转过来的,问问PHP初始化在哪儿?就是程序第一次启动需要读入配置数据那种? 求解:PHP socket 的问题 摘取字符串
$var_name = 'var_value';
function get_variable_name(&$var, $scope = NULL) {
if (NULL == $scope) {
$scope = $GLOBALS;
}
$tmp = $var;
$var = "tmp_exists_" . mt_rand();
$name = array_search($var, $scope, TRUE);
$var = $tmp;
return $name;
}
echo get_variable_name($var_name);//var_name取变量名做什么?这是小白为题么?
感谢解答,关键字$GLOBALS啊,今天又学到新东西了。
我主要是想做一个带预设值下拉框的php函数,想直接给一个选项数组$select_arr,然后<select>标签的name就直接从‘select_arr’中把arr砍去,这样不用另外给标签名,可以少给一个变量,当然定制性强一点,要求array和<select>的命名要求就差一个'_arr',所以有这样的疑问,不知到是不是很愚钝,是不是有别的好办法。
感谢解答,关键字$GLOBALS啊,今天又学到新东西了。
我主要是想做一个带预设值下拉框的php函数,想直接给一个选项数组$select_arr,然后<select>标签的name就直接从‘select_arr’中把arr砍去,这样不用另外给标签名,可以少给一个变量,当然定制性强一点,要求array和<select>的命名要求就差一个'_arr',所以有这样的疑问,不知到是不是很愚钝,是不是有别的好办法。不过仔细一看不太明白, $var = "tmp_exists_" . mt_rand();
$name = array_search($var, $scope, TRUE);这个是什么意思?我原来理解是在$scope中找原来的$var的值,但是 为什么要$var = "tmp_exists_" . mt_rand();呢?
另外,如果有$scope中两个变量的值一样的话,貌似就搞混掉了。
$var = "tmp_exists_" . mt_rand();
function print_var_name($var) {
foreach($GLOBALS as $var_name => $value) {
if ($value === $var) {
return $var_name;
}
} return false;
}看看老外怎么说
http://stackoverflow.com/questions/255312/how-to-get-a-variable-name-as-a-string-in-php
$$a = "var_value";
echo $a;
echo $$a;
$name = array_search($var, $scope, true);
因为是根据值找已定义的变量,会存在相同变量值的情况。以上两句的作用就是解决这个问题的。
解决方法:
1.先将原来变量的值用一个临时变量保存
2.然后把变量值修改为唯一的值(就是不可能有重复的值),再search,这就会找到唯一的变量名。
3.把临时变量的值还原到原来变量因为是用&$var,地址引用,因此修改变量值后,都可以找到第二个问题,要做到的话,$argument_name只能用地址引用,例如这样就可以获取到 parameter_namefunction func_name(&$argument_name) {
echo get_variable_name($argument_name);
}$parameter_name = 'parameter_value';
func_name($parameter_name);function get_variable_name(&$var, $scope=null){
$scope = $scope==null? $GLOBALS : $scope;
$tmp = $var;
$var = 'tmp_value_'.mt_rand();
$name = array_search($var, $scope, true);
$var = $tmp;
return $name;
}