2

我对php没有经验(我是新手)。

我正在尝试使用此代码http://mach13.com/how-to-get-a-variable-name-as-a-string-in-php来查找变量的名称,但我不断得到:

该行的数组到字符串转换:

$aDiffKeys = array_keys (array_diff_assoc ($aDefinedVars_0, $aDefinedVars));

当我使用时,我得到“只有变量应该通过引用传递”

var_name($a, get_defined_vars());

我怎样才能让这些消息消失?因为整个代码都在工作(我得到了想要的输出)。

这是代码

<?php
function var_name (&$iVar, &$aDefinedVars)
{
foreach ($aDefinedVars as $k=>$v)
    $aDefinedVars_0[$k] = $v;

$iVarSave = $iVar;
$iVar     =!$iVar;

$aDiffKeys = array_keys (array_diff_assoc ($aDefinedVars_0, $aDefinedVars));
$iVar      = $iVarSave;

return $aDiffKeys[0];
}
$a=12;
echo var_name($a,get_defined_vars());
//ini_set('display_errors', '0');
?>
4

2 回答 2

9

数组到字符串的转换通知从 PHP v5.4.0 开始。由于array_diff_assoc()不递归搜索,它通知您它发现数组中的一个值也是一个数组,它必须将其转换为字符串。

这是一个关于如何array_diff_assoc()用于多维数组的示例... http://nl3.php.net/manual/en/function.array-diff-assoc.php#73972

或者,如果您只比较密钥,也许切换到您的目的会起作用array_diff_assoc()array_diff_key()

于 2013-09-06T20:39:08.700 回答
1

只有变量应该通过引用传递

您将函数调用的结果作为参数传递。您没有传递变量。

$vars = get_defined_vars();
echo var_name($a,$vars);

此外,除非您有意修改其中一个变量,否则不应将其作为参考传递。这样,所做的任何更改都是函数的本地更改。

于 2013-08-15T13:46:18.870 回答