微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

强制转换为数组VS is_array

如何解决强制转换为数组VS is_array

| 是否有人知道将变量强制转换为数组而不是先检查变量会导致任何问题,性能或其他问题?
// $v Could be a array or string
$v = array(\'1\',\'2\',\'3\'); 
要么
$v = \'1\';
代替:
if (is_array($v)) foreach ($v as $value) {/* do this */} else {/* do this */}
我已经开始使用:
foreach((array) $v as $value) {
    // do this
}
它在相当程度上阻止了代码的重复-但是性能在我心中,而不是丑陋的代码。 此外,有人知道PHP如何处理将数组转换为数组吗?没有引发任何错误,但是PHP引擎是否检查它是否为数组,然后在执行转换过程之前返回结果?     

解决方法

第一:过早的优化是万恶之源。永远不要让性能影响您的编码风格! 当需要数组但想允许单个值时,强制转换为数组可以提供一些不错的技巧
$a = (array) \"value\"; // => array(\"value\")
请注意,这可能会导致某些不必要的(或想要的,但与众不同的)行为
$a = new stdClass;
$a->foo = \'bar\';
$a = (array) $a; // => array(\"foo\" => \"bar\");
但是这个
if(is_array($v)) {
  foreach($v as $whatever) 
  {
    /* .. */
  }
} else {
  /* .. */
}
使您可以决定每种可能发生的情况。如果您“盲目”将其强制转换为数组,则不可能。 简而言之:只需选择一种更适合情况的需求。     ,正如Felix Kling所说,最好的解决方案是让您的数据来自保证其类型的数据源。但是,如果您无法执行此操作,则可以比较一下1000000次迭代:
check first: 2.244537115097s
just cast:   1.9428250789642s
(资源) 只进行铸造而不检查(使用
in_array
)似乎(稍微)更快。     ,这里的另一个选择是(当然,也可以内联完成以避免函数调用):
function is_array($array) {
      return ($array.\"\" === \"Array\");
}
这似乎比is_array快一点,但是您的里程可能会有所不同。 强制转换为这样的数组的问题(这也是一个选择)
if ((array) $v === $v)
是它比小型数组的is_array快,但对于大型数组的灾难性地慢。     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。