无法回显变量的实际值

时间:2018-11-06 08:26:28

标签: php strlen

给我以下变量:%4 $ s ,该变量在代码中输出文本“ 测试”。

我正在尝试echo strlen('%4$s');,但它总是返回 4 ,而将其添加为echo strlen("%4$s");并不会再返回实际值(2),我认为这意味着出于某种原因,它使用变量的编号。

我的主要工作范围是检查%4 $ s 是否包含两个或多个单词,或者计算返回字符串的字符。 目前,%4 $ s ,在我的HTML中返回“ 测试”,因此,我希望得到%4 $ s 的回显返回PHP中的“ 测试”和%4 $ s strlen 返回数字 6

4 个答案:

答案 0 :(得分:1)

您似乎正在使用适用于printf()sprintf()之类的字符串格式,并且想知道第4个输入值的长度。

示例代码:

$format = '%4$s';
$val1 = 'one';
$val2 = 'two';
$val3 = 'three';
$val4 = 'a test';
echo sprintf($format,$val1,$val2,$val3,$val4);

将显示:

a test

您想知道第4个值的长度。您应该执行strlen('%4$s')而不是strlen($val4),例如:

echo strlen($val4);

哪个会显示:

6

一个完整的例子是:

$format = '%5$d is the strlen of "%4$s"';
$val1 = 'one';
$val2 = 'two';
$val3 = 'three';
$val4 = 'a test';
echo sprintf($format,$val1,$val2,$val3,$val4,strlen($val4));

将显示:

  

6是“测试”的全部内容

编辑:即使在查看您发布的pastebin链接后,您仍然不清楚自己在做什么。也就是说,以下是可行的猜测。它使用vsprintf()方法:

$format = '%6$s is the strlen of "%4$s"';
$retArr[0] = array('post_id' => 'one',
            'icon' => 'two',
            'title' => 'three',
            'permalink' => 'a test',
            'image' => '/path/to/img.png');
$retArr[0]['len'] = strlen($retArr[0]['permalink']);
echo vsprintf($format,$retArr[0]);

并且仍然输出:

  

6是“测试”的全部内容

答案 1 :(得分:0)

引荐:http://php.net/manual/en/language.types.string.php

注意:与双引号和heredoc语法不同,特殊字符的变量和转义序列在单引号引起来的字符串中不会扩展。

Double quoted ¶
If the string is enclosed in double-quotes ("), PHP will interpret the following escape sequences for special characters:

$ 

是php中的转义字符,如果您使用"\"之类的"\$s""s"无法正确转义,它将被视为变量"$s"。 因此,您的计数为2

答案 2 :(得分:0)

strlen返回字符串中字母的数量,因此这就是为什么要获取数字4而不是字符串的原因。

尝试:'%4'.$s

答案 3 :(得分:0)

这是一个答案,它将计算字符串长度(按char)并计算字数。

注意:这不是复制粘贴解决方案,因此您将需要更改代码以适应要求。

通过执行通用规则(单词之间用空格分隔),可以轻松获得单词计数。这是一个名为explode()的PHP函数的引入。我们可以将其与count()结合使用以获取字数:

$foo = 'a test';

$wordCount = count(explode(' ', $foo));
$strLength = strlen($foo);

echo $wordCount; # will output 2
echo $strLength; # will output 6

我已经看到了用于数组数据的pastebin,您可以遍历数组以获取单个值,或者使用$array[$key]指定要定位的特定值。