PHP:更快地检查变量是否为整数或以#开头

时间:2011-11-25 12:34:09

标签: php string integer

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

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

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

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

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

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

6 个答案:

答案 0 :(得分:3)

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

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

因为这种方式你只需要打扰使用#键命名自制约定和你要比较的键,以便你从优化中受益。

但除非你进行大量的评估,否则我会坚持if(is_int($val)),因为它更清晰,更不凌乱。

答案 1 :(得分:2)

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

进行检查

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

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

答案 2 :(得分:1)

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

答案 3 :(得分:1)

if (is_int($val) || $val{0} == '#') ...

答案 4 :(得分:0)

您没有太多了解您的实际数据或选择此结构的原因,但根据该信息,更改您的结构以便您不使用散列键混合整数索引可能是一个选项:< / p>

$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
    }
}

如果此解决方案不符合您的需求,请道歉。

答案 5 :(得分:0)

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

这一切都没有丝毫差异。

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