我有一些来自MySQL数据库的字符串。这个问题中使用的两个是:
$preset = "Because we to and "
$response = "want survive prosper improve"
$order = "00101101"
我想按照$order
列出的顺序在页面上打印预设和响应文本(0 = 预设,1 = 响应)。
到目前为止,我有以下代码:
#Variables
$responsewords = explode(" ",$response);
$presetwords = explode(" ", $preset);
$orderexplode = str_split($order, 1);
#Doing Things
foreach($orderexplode as $o)
{
for ($rsw = 0; $rsw <= $noresponse; $rsw++ )
{
switch ($o)
{
case 0:
echo "<br>"."<label>".
$presetwords[$rsw].
"</label>"." ";
break;
case 1:
echo "<input type='text' class='form-control'".
" placeholder=".$responsewords[$rsw].">";
break;
}
}
}
我的问题是这段代码打印了这个,基本上它打印出整个字符串,但没有为每个 0 或 1 分成单独的单词。我正在寻找的结果是这样的(请原谅我的检查元素)。
试试
$preset = "Because we to and ";
$response = "want survive prosper improve";
$order = "00101101";
$orderexplode = str_split($order, 1);
$responsewords = explode(" ",$response);
$presetwords = explode(" ", $preset);
$i =0; $k=0;
foreach($orderexplode as $o)
{
switch ($o)
{
case 0:
echo "<label>".$presetwords[$i]."</label>"." ";
$i++;
break;
case 1:
echo "<input type='text' class='form-control' placeholder=".$responsewords[$k]."><br>";
$k++;
break;
}
}
使用 array_shift()
和 sprintf
可以缩短代码。
第一部分保持不变:
$preset = "Because we to and ";
$response = "want survive prosper improve";
$order = "00101101";
然后,我们创建一个数组,其松散预设位于索引 0,爆炸响应位于索引 1。此外,我们创建一个具有格式(一种模板)的数组,其键与以前的数组相对应。%s
将被替换为单个单词:
$strings = array( explode(" ",$preset), explode(" ", $response) );
$formats = array( '<label>%s</label>', '<input type="text" class="form-control" placeholder="%s">' );
$orderexplode = str_split( $order, 1 );
通过foreach
循环,我们基于$orderexplode
从子数组中提取$string
单个单词,然后使用 sprintf()
作为格式输出它:
foreach( $orderexplode as $key => $o )
{
$txt = array_shift( $strings[$o] );
echo sprintf( $formats[$o], $txt ).PHP_EOL;
}
3v4l.org 演示
<小时 />- 阅读更多 关于 array_shift()
- 阅读更多关于 sprintf()