3

与えられた入力フォームでは、ユーザーは特定の名前を改行で区切ることができ、それらの名前を配列に保存しています。それから私はそれらの名前を印刷し、最後に「名前をありがとう」のようなことを言います。

         $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
4

5 に答える 5

2

簡単にするために foreach ループを使用しましょう...

trim1)すべての空白を失うように、新しい配列と名前を繰り返し処理する必要があります。

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";
?>
于 2012-12-26T18:04:54.123 に答える
1

より優れたPHP開発者になり、ネイティブ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 <5.3を実行している場合は、これをUDFに移動する必要があります。

アップデート

ユーザー入力をトリミングしたくないようです。このように、あなたはドロップarray_walkしてその閉鎖することができます。

$raw_arr = array('    trim  ', 'fine', '');
$reduced_arr = array_filter($raw_arr);

print_r($reduced_arr);
于 2012-12-26T18:19:46.717 に答える
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

trimcharlist を明示的な削除に受け入れます。したがって、スペースを維持したい場合は、newlinesandcarriage returnのみでリストを作成してください。

trim($name, "\r\n");

注: PHP_EOL は、サーバー (UNIX または Windows) に応じた正しい改行文字です。

于 2012-12-26T18:04:10.167 に答える
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
于 2012-12-26T19:58:20.927 に答える
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"
于 2012-12-26T18:06:08.680 に答える