使用isset()返回多个变量

时间:2014-06-09 15:41:03

标签: php return isset

我有一些代码返回用户代理,通过一个函数运行它来解析它。我之前使用的代码只返回解析函数中的一个变量(有三个:'平台''浏览器''版本'):

function my_get_user_agent($value)
{
$browser = parse_user_agent();
return isset($browser['platform']) ? $browser['platform'] : '';
}

虽然此代码用于返回用户代理的平台,但我需要将其附加到函数中返回所有三个变量。我将代码的前半部分更改为我认为正确的代码:

return isset($browser['platform'], $browser['browser'], $browser['version'])? $browser['platform'] : '';
但是,我不确定我需要做些什么才能正确返回所有三个值。建议?

2 个答案:

答案 0 :(得分:1)

您只需返回整个数组:

return $browser;

然后再访问这些值:

$browser['platform'];
$browser['browser'];
$browser['version'];

再次阅读您的问题,您似乎想确保设置该值。你可以这样做:

foreach($browser as $value) {
    if(isset($value)) {
        $data[] = $value;
    }
}
return $data;

现在数据将包含平台,浏览器和版本。

答案 1 :(得分:0)

PHP中没有元组结构:Are there tuples in PHP?

您可以返回整个浏览器数组,也可以返回这样的子集(这不会返回未定义的值):

array_intersect_key($browser, array_flip(array("platform", "browser", "version")))

此外,如果要将函数的结果设置为变量,list构造可以很方便,但您必须确保值按此顺序并且它们存在。为此你必须像SeanWM建议那样继续:

function my_get_user_agent($agent) {
  $browser = parse_user_agent($agent);
  foreach(array("platform", "browser", "version") as $value) {
      $data[] = isset($browser[$value]) ? $browser[$value] : '';
  }
  return $data;
}

list($platform, $browser, $version) = my_get_user_agent($agent);