Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何解析数组中不存在的索引?_Php_Arrays_Indexing_Undefined - Fatal编程技术网

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脚本。我马上给我的问题加上一个例子。