php - 如何解决数组中不存在的索引?

标签 php arrays indexing undefined

我有自己的模板类。在本类(class)中,我替换了类似 {NEXT_PAGE} 的字符串。至

<?php echo $tpl->vars["NEXT_PAGE"]; ?>

但有时会发生该索引不存在的情况。

我找到主题PHP: is_array on $arr['key'] with non existing 'key'我知道如何检查某些索引是否存在。

我的问题是,什么可以更好地提高性能。

  1. 始终检查索引是否存在,如果存在,则打印它
  2. 只打印它而不检查索引是否存在。

第一个解决方案很棒,没有警告,没有错误,没有通知,但我遍历数组两次,第一次检查它,第二次打印它。需要更多的 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 发送的登录名,然后字段不为空。

最佳答案

您当前正在循环遍历文件中的模式匹配,然后将匹配替换为相应的模板变量(如果已设置)。

为什么不从另一个角度来考虑问题呢?

循环遍历模板变量并替换文件中的模式匹配。然后,将所有剩余的模式匹配替换为空字符串。

foreach ($tpl->vars as $key => $val) {
    $template = str_replace("{$key}", $val, $template);
}
$template = preg_replace('/{(.+?)}/', '', $template);

更新:由于您想将 php 字符串而不是实际值写入模板中,因此代码将如下所示:

foreach ($tpl->vars as $key => $val) {
    $template = str_replace("{$key}", "<?php echo \$tpl->vars['$key']; ?>", $template);
}
$template = preg_replace('/{(.+?)}/', '', $template);

然后 $template 将包含您写入缓存的字符串。原理是一样的。

关于php - 如何解决数组中不存在的索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16855933/

相关文章:

php - SonataAdmin - 找不到我要构建的自定义 block

php - 有什么好的 php5 OOP 教程网站吗?

javascript - 如何将特定的表值传递给我们从数据库表中获取的 ajax?

javascript - 通过jquery调用其他页面

java - 如何从字节数组中提取long数据类型?

java - 如何使 && 作为字符串中的逻辑运算符

开始大于停止的 Python 范围

javascript - 将二维数组从 javascript 传递到 php 但大小减小

Javascript在div中查找所选文本的出现位置

python - 获取长向量中最小值索引的有效方法,python