性能:foreach 循环中的 is_numeric() 和 is_string()

Posted

技术标签:

【中文标题】性能:foreach 循环中的 is_numeric() 和 is_string()【英文标题】:Performance: is_numeric() and is_string() in a foreach loop 【发布时间】:2016-10-27 10:32:13 【问题描述】:

我在一个数组ex中有一堆数组。

$array =
         array(
            array(/../),
            array(/../),
            array(/../),
            //upto 100-200 arrays
         );

之后,我将使用foreachecho 所有这些。这里有一些检查$keyis_numeric()还是is_string(),例如:

array(
   'the_key_here_is_numeric',
   'string' => 'the key is string'
);

所以我有一个像这样的foreach

foreach($array as $arr => $arrays) 
   foreach($arrays as $key => $value) 
      if(is_numeric($key)) 
         /.../
      
      if(is_string($key)) 
         /../
      
   
   echo /../;

当我使用KCacheGrind 进行测试时,显然is_string()is_numeric() 会被多次使用,我的问题是,这会影响性能吗?如果是这样,有没有更好的方法来做到这一点?

【问题讨论】:

因为这里有些人喜欢这样投降。你必须习惯它:( 是的,至少,在他们这样做之前,说点什么,像我这样的新手,当像他/她这样的人在这里漫游时,怎么能得到帮助。他们甚至没有帮助他们这样做。 我知道。告诉他们。 问题是我无法反击,因为我不知道他们是谁,也无法举报。 我在这里一开始遇到了完全相同的问题。所以我习惯了:/ 【参考方案1】:

只使用其他。然后条件将只检查一次

没有

if(is_numeric($key)) 
         /.../
      
      if(is_string($key)) 
         /../
      

但是

  if(is_string($key)) 
     /../
   else 
     /.../
  

【讨论】:

好的,我明白你的意思了,但我还有一些问题没有得到解答,显然在你的代码中is_string() 会被调用很多次,is_string() 会影响性能吗如果它被多次调用? 最多只有 200 次迭代,所以没问题。现在我们将这个 IF 减少了一半 ;) 另外,你想用这个键做什么?也许有更好的解决方案 数组可能超过 200 个,是的,你的回答似乎减少了一些东西,我用它来生成 html tagsattributes 你能告诉我更多关于这个的事情吗?现在很难比我更能帮助你了。 什么是什么?这是数组array('div', 'class' => 'div_class')的示例。

以上是关于性能:foreach 循环中的 is_numeric() 和 is_string()的主要内容,如果未能解决你的问题,请参考以下文章

.NET 中的性能分析

Stringbuilder用于Parallel.Foreach循环

刨析 JS 中的forEachfor infor of三类循环原理和性能

MyBatis中的循环插入insert foreach

for、while、foreach性能比较

Java中的增强 for 循环 foreach