我从一些API获得了很多数组,我需要检查是否存在某个变量。
我有很多像这样的块:
if (isset($var))
$varToSet = $var;
else
$varToSet = '';
所以我决定为此做一个功能。我带来了:
function setVar($var)
{
if (isset($var))
return $var;
return '';
}
但正如我所料,我得到错误Undefined variable
,我发现我需要通过引用来传递参数,所以我会得到以下原型:
function setVar(&$var);
到目前为止它一直运作良好,这是我的问题的一个例子:
// works fine
$var = "test";
$varToSet = setVar($var);
// works fine
$var = "test";
$varToSet = setVar($doesNotExist);
// works fine
$var = "test";
$varToSet = setVar($doesNotExist['index']);
// doesn't work
$var = "test";
$varToSet = setVar($var['index']);
在上一个示例中,我得到Illegal string offset 'index
和Only variables can be passed by reference
PHP错误。
我知道为什么我会遇到这些错误,我只是无法弄清楚如何解决这个问题。
答案 0 :(得分:0)
错误为您提供答案。你的变量是一个字符串。但是您尝试使用方括号[]来访问数组元素。
第二个是由无效的参考引起的。
这是通过引用传递的:
$variable = 'test';
myFunction($variable);
这是通过值传递的:
myFunction('test');
这是一个很大的不同!
您无法将字符串称为数组
$varToSet = setVar($var['index']);
您可以将该行更改为:
echo $var['index'];
你仍会有同样的错误/警告。 如果要验证是否设置了数组变量,请使用
isset($var['index'])
但它返回值,而不是参考
答案 1 :(得分:0)
我主要使用property_exists来检查json对象上是否存在值。
function getFromJson($json,$value)
{
if (property_exists(json, $value)) {
return $json->$value;
}
return null;
}
function get($var,$value = null)
{
if (is_null($value)) {
return $var;
}
if (is_object($var) && property_exists($var, $value)) {
return $json->$value;
}
if (is_array($var)) {
return $var[$value];
}
return $var;
}