如何增加printf格式的php变量

时间:2017-03-14 15:56:35

标签: php variables printf

在我的WordPress博客上,我试图给侧边栏小部件提供特定的ID。我想给它们一个简单的递增ID,例如id="sidebar-box-" . $i,其中i是递增变量。

我有来自this page的代码,它可以给它一个特定的id,但我希望更多地控制id用于样式目的并保持我的css遵循相同的模式。我目前的代码如下:

function custom_sidebar() {
    register_sidebar( array(
        'name'          => 'Blog Sidebar',
        'id'            => 'blog_sidebar',
        'before_widget' => '<div id="sb-box-%d" class="sidebar-box">',
        'after_widget'  => '</div>',
        'before_title'  => '<h3>',
        'after_title'   => '</h3>',
    ) );
}

但是这段代码给了我一个这样的id:decent_comments_widget-2。我的理解是%1表示使用printf函数的第一个参数,就像基于what I've read的字符串一样。我无法理解$ s部分是什么,我甚至不知道它从哪里得到第一个参数,因为寄存器侧边栏功能只是作为第一个参数传递一个数组。在最后使用递增变量创建一个简单id的正确方法是什么?任何以这种格式理解变量的帮助也是受欢迎的。谢谢!

编辑:我将ID值从“sb-box-%1 $ s”更改为“sb-box-%d”,但现在我只打印了“sb-box-0”对于侧边栏中的每个“侧边栏”类div,一遍又一遍。我找不到设置变量的正确位置。

1 个答案:

答案 0 :(得分:0)

通常情况下,您使用%s(或其他内容)表示您希望在使用sprintf()时将字符串放在那里。

但是当你有多个(不同的)转换规范(%_)时,你需要以与格式字符串相同的顺序传递给sprintf()的参数,或者你可以指定他们需要的顺序。否则字符串可能看起来不像你预期的那样。

使用n$(如@AlexBlex所述),n是第n个参数,可以很容易地完成。

示例:
我有字符串I am buying %d %s.(可以是I am buying 2 tomatoes.),但我希望我的sprintf()函数与sprintf($format, $item, $amount);类似。
我当前的字符串是不可能的。通过在%s之间添加1 $,我可以指定该占位符将是第一个参数,$2用于%d来指定这将是第二个参数。<登记/> 我得到的是:

$item = "tomatoes";
$amount = 314;
$format = "I am buying %2$d %1$s.";
echo sprintf($format, $item, $amount);

// I am buying 314 tomatoes.   

sprintf()上的文档提供了有关参数交换的更多信息。

id =“sidebar-box-”。 $ I
你想增加div的id的一部分,我建议你将before_widget数组键的值更改为<div id="side-barbox-%d" class="sidebar-box">,这样你可以轻松地增加整数,然后通过{ {1}}。