【问题标题】:PHP: Faster to check if variable is integer or starts with #PHP:更快地检查变量是整数还是以#开头
【发布时间】:2011-11-25 12:34:09
【问题描述】:

我正在开发一个包含一些数组的模块。 现在我的数组包含:

$omearray = array (
  '#title' = 'title',
  0 = array ( 'another array', '2ndvalue', ),
  );

foreach($omearray as $key => $value)

当我加载要显示的数组时,我想检查$key 值是0123 等还是以a 开头的$key#.

哪个更好用:检查值是否is_int() 或检查第一个字符是否为# 的正则表达式?

编辑:检查 stringpos 1 是 #is_int(),因为正则表达式似乎很慢。

【问题讨论】:

  • 与其他字符串操作函数相比,正则表达式真的很慢。如果要检查第一个字符是否为#,请使用strpos($key, '#') === 0(并确保像我一样使用三个=,原因解释为here)。

标签: php string integer


【解决方案1】:

由于if ($key[0]=='#') 更快,is_int() 是详尽无遗的,而|| 是具有左结合性的短路运算符(从左到右计算,请参见http://php.net/manual/en/language.operators.logical.php 上的示例 1)我会说:

if ($key[0]=='#' || is_int($val)) /* etc */

因为这样你只需要费心使用 #key 命名约定与你将要比较的键进行大量比较,以便从优化中受益。

但除非您进行大量评估,否则我会坚持使用if(is_int($val)),因为它更清晰且不那么混乱。

【讨论】:

    【解决方案2】:

    我会使用if($key[0]=="#")检查它

    您还可以检查 $value 是否为数组 (is_array($value)),在这种情况下,您不需要 regex、is_int 和 # char。

    PS:# 字符表示(某处)“我是一个数字/ID”

    【讨论】:

    • 而你为什么在 is_int 方法之上使用这种方法呢?我想说检查整数要灵活得多,因为您不依赖于 # 字符。
    • @Baszz 如果数字前有 '#' 字符并且其他之前没有 #,这是检查它是否为数字的最快方法。但是 # 字符可能是多余的,因为有一个函数可以做到这一点 - is_int()
    • 如果您确定 # 始终存在,那么您是绝对正确的。我只是想知道是什么驱使你得到这个答案。
    【解决方案3】:
    if (is_int($val) || $val{0} == '#') ...
    

    【讨论】:

      【解决方案4】:

      我会选择is_int(),因为您不依赖于字符串。它可以是任何东西,您的代码仍将采用整数索引。寻找 # 作为第一个字符将阻止这种灵活性。但是,如果您绝对确定字符串的第一个字符将始终是 #,那么$Key[0] == '#' 将是最快的选项。

      【讨论】:

        【解决方案5】:

        您还没有深入了解您的实际数据或选择此结构的原因,但根据该信息,更改您的结构以便您不会将整数索引与哈希键混合在一起可能是一种选择:

        $omearray = array(
            '#title' => 'title',
            'foo' => array(
                'anotherarray',
                '2ndvalue'
            )
        );
        
        foreach ($omearray as $key => $value) {
            if ($key == 'foo') {
                // do something with $value, which is the 2nd array, numerically indexed
            }
        }
        

        如果此解决方案不适合您的需求,我们深表歉意。

        【讨论】:

        • Nope 对我不起作用数据是按照我上面提供的方式生成的。我也不是问怎么做,而是问哪个更好。
        【解决方案6】:

        您可以检查字符串是否为整数
        或者如果它以 #
        开头 或两者兼有
        管他呢。

        这一切都没有丝毫区别。

        它不是您的代码的一部分,可能会影响任何性能问题。

        【讨论】:

          猜你喜欢
          • 2011-05-24
          • 1970-01-01
          • 2020-01-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-10-14
          • 2011-01-12
          • 1970-01-01
          相关资源
          最近更新 更多