在php中用变量替换字符串

时间:2014-08-30 作者:stijn.aerts

我的Wordpress插件中有以下代码:

wp_localize_script(\'ffd_js_script\', \'myAjax\', array(
            \'ajaxurl\' => admin_url(\'admin-ajax.php\'),
            \'idinfo\' => $myoptionValue[idinfo],
            \'index1\' => $myoptionValue[id1],
            \'index2\' => $myoptionValue[id2]
            )
        );
我想替换

\'index1\' => $myoptionValue[id1],
\'index2\' => $myoptionValue[id2]
使用

for($i=1; $i<= $myoptionValue[fieldcount]; $i++)
        {
            $arguments .= \',"index"\'.$i.\'=>\'.$myoptionValue[id.$i];
        }
所以我有

        wp_localize_script(\'ffd_js_script\', \'myAjax\', array(
            \'ajaxurl\' => admin_url(\'admin-ajax.php\'),
            \'idinfo\' => $myoptionValue[idinfo]
            $arguments
            )
        );
很明显,我在想可能就这么简单,但事实并非如此,我的错误在哪里?

编辑:

完整代码:

require( plugin_dir_path( __FILE__ ) . \'menu.php\');
require_once( plugin_dir_path( __FILE__ ) . \'getuser.php\');

add_action( \'wp_enqueue_scripts\', \'ffd_load_scripts\' );

function ffd_load_scripts()
{
$myoption =  get_option( \'fixformdata_options\' );
$myoptionValue = maybe_unserialize( $myoption );  

$arguments = array();
for($i=1; $i<= $myoptionValue[fieldcount]; $i++)
{
    $arguments[\'index\'.$i] = $myoptionValue[\'id\'.$i];
}

wp_register_script(\'ffd_js_script\', WP_PLUGIN_URL.\'/FixFormData/js/ffd_js_script.js\', array(\'jquery\'));
wp_localize_script(\'ffd_js_script\', \'myAjax\', merge_array(array(
    \'ajaxurl\' => admin_url(\'admin-ajax.php\'),
    \'idinfo\' => $myoptionValue[\'idinfo\']),$arguments)
    );

wp_enqueue_script(\'jquery\');
wp_enqueue_script(\'ffd_js_script\', plugin_dir_url(__FILE__) . \'js/ffd_js_script.js\');
}

1 个回复
SO网友:Tom J Nowell

定义字符串有4种有效方法,see this question for more details.

然而,在您的情况下,PHP提供了一个特殊的例外。然而,大多数用户都没有意识到这一点,而且它确实留下了歧义,因为不再可能区分字符串文字、常量或定义,这使得其他程序员很难阅读您的代码(例如,您自己在9个月内)。

因此,您的代码:

for($i=1; $i<= $myoptionValue[fieldcount]; $i++)
{
    $arguments .= \',"index"\'.$i.\'=>\'.$myoptionValue[id.$i];
}
正在尝试将字符串附加到数组的结尾,但这不起作用。数组不是字符串,只能使用.=. 字符串上的运算符。而且$myoptionValue[id.$i] 违反特例情况,因为表达式现在不明确(它是指“id.$i”、“id.$i”还是“id.$i”?)

要将项目添加到数组,需要执行以下操作之一:

$arr = array();
$arr[\'key\'] = \'value\';
$arr[] = \'value without a key\';
array_push( $arr, \'value1\', \'value2\', \'value3\', etc... );
因此,您的循环应该是:

for ( $i=1; $i <= $myoptionValue[\'fieldcount\']; $i++ ) {
    $arguments[\'index\'.$i] = $myoptionValue[\'id\'.$i ];
}

结束

相关推荐

hooks & filters and variables

我是updating the codex page example for action hooks, 在游戏中完成一些可重用的功能(最初是针对这里的一些Q@WA)。但后来我遇到了一个以前没有意识到的问题:在挂接到一个函数以修改变量的输出后,我再也无法决定是要回显输出还是只返回它。The Problem: 我可以修改传递给do_action 用回调函数钩住。使用变量修改/添加的所有内容仅在回调函数中可用,但在do_action 在原始函数内部调用。很高兴:我将其修改为一个工作示例,因此您可以将其复制/粘贴