存储来自 preg_split 的变量,并使用它与单词组合

Store variable from preg_split, and use it it comination with the word

我仍然面临一个主要问题,不幸的是,这个问题在之前的问题中没有得到解答。我想执行以下操作:

我有一个定制的 cms,我想在其中使用简码来使用插件。它是这样工作的:

this is a text
[plugin-blog]
this is more text
and some more
[plugin-contact]

它输出的是这样的:

this is a text
include_once('plugins/blog/blog.php'); <- loads specific file for plugin
this is more text
and some more
include_once('plugins/contact/contact.php'); <- loads specific file for plugin

这工作正常,但我想要的是从插件中获得一个特定的 ID,我想用 [plugin-blog 2] 调用它。我需要存储插件的编号,稍后在插件的 php 文件中使用它 SELECT * FROM 'plugin_db' WHERE 'id' = $value_from_shortcode

我该怎么做?我对如何解决这个问题一无所知。我几乎尝试了所有方法,但是要么循环不再工作,要么没有使用插件名称的组合保存数字。我有以下代码:

$regex = '~\[plugin-([^]]+)]~';
        $content_one = htmlspecialchars_decode($page['content_one']);
        $parts = preg_split($regex, $content_one, -1, PREG_SPLIT_DELIM_CAPTURE);

        foreach($parts as $k => $v){
            if($k & 1)
                include_once('plugins/'.$v.'/'.$v.'.php');
            else
                echo htmlspecialchars_decode($v);
        }

您的父作用域变量应该在您的包含文件中作为全局变量可用:

鉴于:下面是test.php

<?php

$foo = "test";

include('./b.php'); 

这是b.php:

<?php echo $foo;

运行 test.php 将输出 test

所以在你的情况下 $k$v 将在你包含的文件中可用,所以你可以做类似的事情:

if (1 == $k) {
    $id = $v;

    include_once('plugins/'.$v.'/'.$v.'.php');
}

请考虑学习 PHP 和最佳实践。

您可以通过以下方式检索 ID 和名称:

    foreach($parts as $k => $v){
        if($k & 1) {
            $id = preg_replace('/\D+/', '', $v);
            $v = preg_replace('/\d+/', '', $v);
            echo "id = $id\n";
            include ('plugins/'.$v.'/'.$v.'.php');
        } else {
            echo htmlspecialchars_decode($v);
        }
    }

注意:保持测试$k & 1处理所有插件。