Php 如何解析数组中不存在的索引?
我有自己的模板类。在这个类中,我将像Php 如何解析数组中不存在的索引?,php,arrays,indexing,undefined,Php,Arrays,Indexing,Undefined,我有自己的模板类。在这个类中,我将像{NEXT_PAGE}这样的字符串替换为 <?php echo $tpl->vars["NEXT_PAGE"]; ?> 因此,当有人第一次访问此页面时,登录名未设置,PHP无法打印任何内容,但它可以,字段仍然为空。如果表单是send,则脚本添加到LOGIN\u NAME send LOGIN NAME,然后字段不为空。您可以将@放在echo语句前面,这将抑制任何错误。也许还有其他方法可以编写不需要数组访问的模板引擎(可能改用自定义对象或ex
{NEXT_PAGE}
这样的字符串替换为
<?php echo $tpl->vars["NEXT_PAGE"]; ?>
因此,当有人第一次访问此页面时,登录名未设置,PHP无法打印任何内容,但它可以,字段仍然为空。如果表单是send,则脚本添加到LOGIN\u NAME send LOGIN NAME,然后字段不为空。您可以将@放在echo语句前面,这将抑制任何错误。也许还有其他方法可以编写不需要数组访问的模板引擎(可能改用自定义对象或extract()函数),但这里的@trick似乎最简单。您可以将@放在echo语句前面,这样可以抑制任何错误。可能还有其他编写模板引擎的方法不需要以这种方式访问数组(可能使用自定义对象或extract()函数),但这里的@trick似乎最简单。您可以使用isset函数检查变量的索引是否存在:
if (isset($tpl->vars["NEXT_PAGE"]))
{
}
您可以使用isset函数检查变量的索引是否存在:
if (isset($tpl->vars["NEXT_PAGE"]))
{
}
您当前正在文件中循环模式匹配,然后使用相应的模板变量(如果已设置)替换匹配 你为什么不从另一方面来解决这个问题呢 循环遍历模板变量并替换文件中的模式匹配项。然后,用空字符串替换所有剩余的模式匹配项
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);
foreach($tpl->vars as$key=>$val){
$template=str_replace(“{$key}”,“”,$template);
}
$template=preg_replace('/{(+?)}/','''$template);
然后,
$template
将包含写入缓存的字符串。原理是相同的。您当前正在循环文件中的模式匹配,然后用相应的模板变量(如果已设置)替换匹配
你为什么不从另一方面来解决这个问题呢
循环遍历模板变量并替换文件中的模式匹配项。然后,用空字符串替换所有剩余的模式匹配项
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);
foreach($tpl->vars as$key=>$val){
$template=str_replace(“{$key}”,“”,$template);
}
$template=preg_replace('/{(+?)}/','''$template);
然后,
$template
将包含写入缓存的字符串。原理是一样的。您的系统性能是否至关重要?每秒将执行多少次查找
关于isset()如何比array_key_exists()快的帖子。
想想在阵列中有没有这个键对设计意味着什么。它应该一直存在吗?模型在每种情况下都有效吗
我目前的理解是需要查找。您的系统性能是否至关重要?每秒将执行多少次查找 关于isset()如何比array_key_exists()快的帖子。 想想在阵列中有没有这个键对设计意味着什么。它应该一直存在吗?模型在每种情况下都有效吗
我目前的理解是,查找是必需的。
不需要处理整个数组来完成此操作,因为每次我认为第一个解决方案是直接哈希查找,混淆的机会就少了。@MarkBaker,对于数组,有“array\u key\u exists”函数而不是“isset”。@maximkou-我知道,isset()速度更快,因为它是一个语言构造而不是一个函数,指出数组\u key\u exists()…它只是检查该键是否存在,而不像isset()那样,如果找到,它也会对相应的数组值运行isset()。
它不需要处理整个数组来完成此操作,因为每次我想到第一个解决方案时它都是直接哈希查找,所以混淆的机会就少了。@MarkBaker,对于数组,有“array\u key\u exists”函数而不是“isset”。@maximkou-我知道,isset()更快,因为它是一个语言构造,而不是一个指出array\u key\u exists()的函数。它只是检查键是否存在,与isset()不同,isset()也会对相应的数组值(如果找到)运行isset()。我同意@MarkBaker的观点,抑制错误从来都不是一个好的解决方案。在大多数情况下,我不推荐这种方法,但在这里,它可能是性能最好的方法,没有任何真正的缺点。对于数组键存在的97%的时间,我认为这将是最快的,当然应该确定它的基准。但现在我看到@JoeGreen的解决方案,我认为更好,所以我的投票将是赞成的。我同意@MarkBaker,抑制错误从来都不是一个好的解决方案。在大多数情况下,我不推荐这种方法,但在这里,它似乎可能是最有表现的,没有任何真正的负面影响。在数组键存在的97%的时间里,我认为这将是最快的,当然应该进行基准测试。但现在我看到@JoeGreen的解决方案,我认为更好,所以我会投赞成票。请再次阅读我的问题,我说,我知道如何检查,如果索引存在……请再次阅读我的问题,我说,我知道如何检查,如果索引存在……不,我替换文件中所有出现的内容,然后将其缓存为PHP脚本,稍后只调用这个PHP脚本。我会在一分钟内为我的问题添加一个例子。不,我会替换文件中所有出现的内容,然后将其缓存为PHP脚本,稍后只调用这个PHP脚本。我马上给我的问题加上一个例子。