2016-05-21 14 views
0

"名前、姓および姓"に使用される入力が1つあります。しかし、3つ以上の名前を入力する場合は、3(4,5,6 ...)後に家族のようにする必要があります。しかし、2つの名前を提出する場合、姓は「0」でなければなりません。ここでPHP粉砕/爆発テキスト

は私のコードです:

<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

どのように名前を数え、スペースで区切っていますか? –

+0

@kamalpalはい、しかしスペース。 – diank

答えて

1

このコードは出力famillyの配列は、それはあなたがexplodeを使用することができます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

+0

よくできましたが、 "通知:未定義変数:キー入力"。 – diank

+0

うん、コードを更新する、1分: –

+0

完了:解決策としてマークするのを忘れないでください。コードは良いです。 –

1

に置き換えられますでしょう空白を削除するにはarray_filterを使用します。これは、ユーザーが2つのスペースを入力できるためです。

その後、array_shiftを使用すると、配列の先頭から値が返されます。

以降の配列が空でないかどうかを確認、その後、スペースでimplodeを使用するには、そうでない場合は0

$familyNameを設定
<?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); 
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 ' 

trim()

' Arthur  Ignatius  Conan Doyle ' 

から

は、文字列の先頭と末尾から空白を削除するために使用されますが、他の文字を削除したい場合は、第二引数を提供することができます。今区切り文字(」「)が与えられたとき、配列に文字列を分割

'Arthur Ignatius Conan Doyle' 

explode()私たち

を与える

、第三引数は、あなたがに文字列を分割する部品の最大数を設定してみましょう。

文字列には空の配列が返される可能性があるため、3つの部分がある可能性があります。 array_fill(0,3,'')は、3つの要素がすべて空の文字列に設定された配列を作成します。 array_replace(array_fill(0,3,''), $parts );は配列を返しますが、値は$parts配列によって提供される値で置き換えられます。

この配列は、変数のリストに各配列要素の値を設定するlist構成に渡されます。