强制转换为数组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快,但对于大型数组的灾难性地慢。     

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...