【问题标题】:How to increment printf format php variable如何增加printf格式的php变量
【发布时间】:2017-03-14 15:56:34
【问题描述】:

在我的 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 部分是什么,我什至不确定它从哪里获取第一个参数,因为 register 侧边栏函数仅被传递一个数组作为它的第一个参数。什么是在最后制作一个带有递增变量的简单 id 的正确方法?也欢迎任何帮助理解这种格式的变量。谢谢!

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

【问题讨论】:

  • 1$ 可用于参数交换,更多信息请查看the documentation
  • @tomudding,不是$s,而是1$s 部分只是表示字符串部分。
  • @AlexBlex 哎呀,我的错,我复制了错误的东西。

标签: php variables printf


【解决方案1】:

通常你会使用%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 数组键的值更改为 &lt;div id="side-barbox-%d" class="sidebar-box"&gt; 这样您可以轻松地增加整数,然后将其传递给 sprintf()

【讨论】:

  • 我相信问题是如何在 wordpress 中做到这一点,它使用 sprintf 来处理问题中的侧边栏数组。
  • 感谢您提供的信息丰富的回答!每次使用“sidebar-box-%d”都会给我一个零。我认为这会起作用,但我只是没有将变量设置在正确的位置。设置变量的合适位置在哪里?
  • @DigitalBrent 你的变量是字符串吗(比如$var = "2";)?因为你必须使用%s 而不是%d,因为它用于(有符号)十进制数,sprintf() 将插入0 而不是实际数字。
  • 不,我已经尝试在原始问题的函数的不同位置多次设置变量,但它只会破坏侧边栏代码:(
  • 是否必须在functions.php文件的其他地方设置?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-03
  • 2015-09-21
  • 2011-06-03
相关资源
最近更新 更多