【发布时间】:2013-05-31 11:11:47
【问题描述】:
我有自己的模板类。在这个类中,我将字符串 like {NEXT_PAGE} 替换为
<?php echo $tpl->vars["NEXT_PAGE"]; ?>
但有时会发生,该索引不存在。
我找到了主题PHP: is_array on $arr['key'] with non existing 'key' 并且我知道如何检查是否存在某个索引。
我的问题是,怎样才能更好地提高性能。
- 始终检查索引是否存在,如果存在,打印它
- 只打印它而不检查索引是否存在。
第一个解决方案很棒,没有警告,没有错误,没有通知,但是我通过数组两次,第一次检查它,第二次打印它。需要更多 CPU 时间。
第二个解决方案只是尝试找到它,如果存在则打印它,否则打印空字符串,这对我来说没问题,我可以通过error_reporting禁用警告
那么什么更好呢?我认为第二种解决方案是禁用警告。 PHP总是必须检查索引是否存在,但是当我也检查它时,它会检查两次。我说的对吗?
需要明确的是,访问不存在的索引最多占所有访问该数组的 3%。
示例
我有一个表格,如果通过不正确,我会在其中放回登录名。
当我将 {LOGIN_NAME} 替换为 <?php echo $tpl->vars["LOGIN_NAME"]; ?> 时,我将这个新文件像 PHP 脚本一样保存,所以稍后我只运行它,不再替换!
所以我编译的脚本是这样的
<form ...>
<input type="login" ... value="<?php echo $tpl->vars["LOGIN_NAME"] ?>" />
(pass etc...)
</form>
因此,当有人第一次访问此页面时,未设置 LOGIN_NAME,PHP 无法打印任何内容,但没关系,字段仍然为空。如果表单是发送,脚本添加到 LOGIN_NAME 发送的登录名,然后字段不为空。
【问题讨论】:
-
<?php echo (isset($tpl->vars["NEXT_PAGE"])) ? $tpl->vars["NEXT_PAGE"] : ''; ?>它不需要处理整个数组来执行此操作,因为它每次都是直接哈希查找 -
我认为第一个解决方案,混淆的可能性较小。
-
@MarkBaker,对于数组,有“array_key_exists”函数而不是“isset”。
-
@maximkou - 我知道,isset() 更快,因为它是一种语言结构而不是函数
-
很高兴指出array_key_exists()...它只是检查键是否存在,不像isset(),它也会在相应的数组值上运行isset(),如果找到的话。
标签: php arrays indexing undefined