我正在开发一个包含一些数组的模块。 现在我的数组包含:
$omearray = array (
'#title' = 'title',
0 = array ( 'another array', '2ndvalue', ),
);
foreach($omearray as $key => $value)
当我加载要显示的数组时,我想检查$key
值是0
,1
,2
,3
等。或以$key
开头的#
值。
哪个更好用:检查值is_int()
或检查第一个字符是否为#
的正则表达式?
编辑:检查字符串1是#
vs is_int()
,因为正则表达式似乎很慢。
答案 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)
您可以检查字符串是否为整数
或者如果它以#
开头
或两者兼备
管他呢。
这一切都没有丝毫差异。
您的代码不是可能影响任何性能问题的一部分。