首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >安全地获取已定义和未定义索引的数组元素值

安全地获取已定义和未定义索引的数组元素值
EN

Stack Overflow用户
提问于 2012-04-24 23:16:25
回答 3查看 20.5K关注 0票数 33

我已经厌倦了编写三元表达式来清理数据,比如:

代码语言:javascript
复制
$x = isset($array['idx']) ? $array['idx'] : null;
// and
$x = !empty($array['idx']) ? $array['idx'] : null;

有没有一种原生方法ZF存取器/过滤器来获取某个给定数组的数组元素值,而不需要:

  • disabling error_reporting
  • ternary isset/empty check
  • error isset operator my own function or empty @
  • creating my or or application accessor/filter

  • disabling global /emptycheck
  • error control operator(在我自己的全局函数或应用程序中检查错误控制操作符)

类似于:

代码语言:javascript
复制
$x = get_if_set($array['idx']);
// or 
$x = Zend_XXX($array, 'idx')
EN

回答 3

Stack Overflow用户

发布于 2016-06-18 16:17:22

PHP7引入了null coalesce operator ??。假设您足够幸运地运行它,您可以这样做

代码语言:javascript
复制
$x = $array['idx'] ?? null;
票数 48
EN

Stack Overflow用户

发布于 2017-08-28 17:08:49

我想说的是,使用一个辅助函数来连接你的数组。

代码语言:javascript
复制
function getValue($key, $arr, $default=null) {
   $pieces = explode('.', $key);
   $array = $arr;

   foreach($pieces as $array_key) {

      if(!is_null($array) && is_array($array) && array_key_exists($array_key, $array)) { 
          $array = $array[$array_key];
      }
      else {
          $array = null;
          break;
      }
   }
   return is_null($array) ? $default : $array;
}

$testarr = [
    ['foobar' => 'baz'],
    ['active' => false]
];
$output = getValue('0.foobar',$testarr,'NOT FOUND');
var_dump($output);
$output = getValue('0',$testarr,'NOT FOUND');
var_dump($output);
$output = getValue('1.active',$testarr,'NOT FOUND');
var_dump($output);
$output = getValue('i.do.not.exist',$testarr,'NOT FOUND');
var_dump($output);

这样,您可以根据自己的喜好提供默认值而不是null,您不需要将数组恢复为另一个对象,并且您可以请求任何嵌套得尽可能深的值,而不必检查“父”数组。

https://ideone.com/11jtzj

票数 1
EN

Stack Overflow用户

发布于 2012-04-25 00:01:03

声明你的变量并给它们一些初始值。

代码语言:javascript
复制
$x = NULL;
$y = 'something other than NULL';

现在,如果您有一个具有x和y键的数组$myArray,提取函数将覆盖初始值(您也可以不对其进行配置)

代码语言:javascript
复制
$myArray['x'] = 'newX';
extract($myArray);
//$x is now newX

如果不存在键,则变量的初始值保持不变。它还会将其他数组键放入相应的变量中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10300868

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档