我有一个用于“姓名,姓氏和姓氏”的输入。但是我希望如果用户输入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
?>
如果有人帮助我,我会很高兴。谢谢!
答案 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);
?>
答案 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
构造,该构造使用每个数组元素的值填充变量列表。