PHP破碎/爆炸文本

时间:2016-05-21 12:50:00

标签: php

我有一个用于“姓名,姓氏和姓氏”的输入。但是我希望如果用户输入3个以上的名字,所有3个(4,5,6 ...)之后都像家人一样。但是,如果您提交2个姓名,则姓氏必须为“0”。

这是我的代码:

<form method="POST" action="getNames.php">
    Names: <input type="text" name="names" />
    <input type="submit" name="submit" />
</form>

<?php

$names = $_POST['names'];

// some action here to get names

$firstName = ""; // Get first name
$surName = ""; // Get Sur name
$familyName = ""; // Get family name

?>
如果有人帮助我,我会很高兴。谢谢!

3 个答案:

答案 0 :(得分:1)

此代码将输出一个familly数组,如果缺少输入,则将替换为0。

<强> PHP

<?php
$_POST['names'] = 'sofiene, totose, tata, titi';
$names = explode(',', $_POST['names']);
$familly = [];

for ($i = 0; $i < count($names); $i+=3) {
    $familly[$i] = [
        'firstName' => (isset($names[$i])) ? $names[$i] : 0,
        'surName' => (isset($names[$i + 1])) ? $names[$i + 1] : 0,
        'familyName' => (isset($names[$i + 2])) ? $names[$i + 2] : 0
    ];
}
var_dump($familly);
?>

EvalIn

答案 1 :(得分:1)

您可以将explode与空格一起使用,并使用array_filter删除空格,因为用户可能会输入两个空格。

之后你可以使用array_shift从数组顶部返回一个值。

稍后检查数组是否为空,然后使用带有空格的implode,否则将$familyName设置为0

<?php
$names = 'John Doe';
$arrNames = array_filter(explode(' ', $names));

echo $firstName = array_shift($arrNames) . PHP_EOL;
echo $surName = array_shift($arrNames) . PHP_EOL;
echo $familyName = empty($arrNames) ? '0' : implode(' ', $arrNames);

答案 2 :(得分:1)

这是你在找什么?

$_POST['names'] = '   Arthur     Ignatius       Conan  Doyle   ';

$names = trim(preg_replace('/\s+/', ' ', $_POST['names']));

$parts = explode(' ',$names , 3);

list($firstNamm, $surName, $familyName) =  array_replace(array_fill(0,3,''), $parts  );

解释,

preg_replace('/\s+/', ' ', $_POST['names'])用于将多个空格减少到单个空格。

'   Arthur     Ignatius       Conan  Doyle   '

' Arthur Ignatius Conan Doyle '

trim()用于从字符串的开头和结尾删除空格,如果要删除其他字符,可以提供第二个参数。

现在给我们

'Arthur Ignatius Conan Doyle'

explode()在给定分隔符(“”)时将字符串拆分为数组,第3个参数允许您设置将字符串拆分为的最大部分数。

因为字符串可能没有3个部分可能返回一个空数组。 array_fill(0,3,'')创建一个数组,其中三个元素都设置为空字符串。 array_replace(array_fill(0,3,''), $parts );返回数组,但其值已替换为$parts数组提供的任何值。

此数组传递给list构造,该构造使用每个数组元素的值填充变量列表。

相关问题