鉴于,在输入表单中,用户可以用新行分隔某些特定名称,我将这些名称保存在数组中。然后我打印这些名字,最后说出“谢谢你的名字”。
$var = "name1
name2
";
$your_array = explode("\n", $var);
for($i=0; $i<(sizeof($your_array));$i++) {
echo ($your_array[$i]);
}
echo "Thank you for the names"
但问题是如果有人在名字之前或之后输入多个换行符,那么下一个名字会在下面的某个距离之后显示
name1
name2
Thank you for the names
如何逃避这个并输出如下
name1
name2
Thank you for the names
我尝试使用array_filter()但它在这里不起作用。
更新
If someone input
$var = "name1\nname2\n\n\n
name3
name4";
输出应该像
name1
name2
name3
name4
但所有答案都显示为
name1
name2
name3
name4
答案 0 :(得分:2)
为了简单起见,让我们使用foreach循环...
1)我们需要遍历新数组和trim
名称,以便我们丢失所有空格。
2)当且仅当名称的长度为1或更长时,我们才会回显该名称。
3)我们添加<br>
标记,以使每个名称显示在新行上。
<?php
$var = "name1\nname2\n\n\n";
$your_array = explode("\n", $var);
foreach($your_array as $name)
{
if(preg_match("/[a-zA-Z0-9]{1,}/i", $name)) {
$name = trim($name);
echo (strlen($name) > 1) ? sprintf('%s<br>', $name) : '';
}
}
echo "Thank you for the names";
?>
答案 1 :(得分:1)
$your_array = explode(PHP_EOL, $var);
$names = array();
for ($i = 0; $i < count($your_array); $i ++ )
{
// trim clean spaces and newlines surrounding each line
// resulting value is assigned to $test
// if this value is not empty the conditional is a true proposition
// so is assigned to $names
if ($test = trim($your_array[$i]))
$names[] = $test;
}
echo implode(PHP_EOL, $names) . PHP_EOL;
echo 'Thank you for the names.';
编辑:使用foreach
$your_array = explode(PHP_EOL, $var);
foreach ($your_array as $name)
{
if ($test = trim($name))
$names[] = $test;
}
if ($names)
{
// echo implode(PHP_EOL, $names) . PHP_EOL;
echo implode('<br />', $names) . '<br />';
echo 'Thank you for the names.';
}
else
echo 'Names missing.';
编辑2
trim
接受明确删除的列表,因此如果您想维护空格,请仅列出newlines
和carriage return
的列表。
trim($name, "\r\n");
注意:PHP_EOL是正确的新行char,取决于服务器(unix或windows)。
答案 2 :(得分:1)
Be a better PHP developer并使用本机PHP数组函数:
$raw_arr = array(' trim ', 'fine', ' ');
array_walk($raw_arr, function(&$value) {
$value = trim($value);
});
$reduced_arr = array_filter($raw_arr);
print_r($reduced_arr);
注意:我使用过闭包。如果您正在运行PHP&lt; 5.3,您需要将其移动到UDF。
好像你不想修剪用户输入。因此,您可以删除array_walk
及其关闭。
$raw_arr = array(' trim ', 'fine', '');
$reduced_arr = array_filter($raw_arr);
print_r($reduced_arr);
答案 3 :(得分:0)
for($i=0; $i<(sizeof($your_array));$i++) {
if (empty($your_array[$i])) continue;
echo ($your_array[$i]);
}
echo "Thank you for the names"
答案 4 :(得分:0)
您可以使用array_filter
+ array_map
+ trim
来弃空空
$var = "name1
name2
";
$array = array_filter(array_map("trim",explode("\n", $var)));
echo implode(PHP_EOL, $array) , PHP_EOL;
echo "Thank you for the names";
或者只使用preg_match_all
preg_match_all("/\S?([a-z0-9]+)\S?/", $var,$array);
echo implode(PHP_EOL, $array[0]),PHP_EOL;
echo "Thank you for the names";
两者都会输出
name1
name2
Thank you for the names