【问题标题】:Performance: is_numeric() and is_string() in a foreach loop性能:foreach 循环中的 is_numeric() 和 is_string()
【发布时间】: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() 会被多次使用,我的问题是,这会影响性能吗?如果是这样,有没有更好的方法来做到这一点?

【问题讨论】:

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

标签: php arrays foreach isnumeric


【解决方案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')的示例。
猜你喜欢
  • 1970-01-01
  • 2015-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-22
  • 1970-01-01
  • 2017-07-14
相关资源
最近更新 更多