0

基本的に、次の情報を単一のデータベース フィールドに追加したいと考えています (txt-via-hn テキスト ボックスは番地、txt-via は住所の詳細です)。

$vias =         $_POST['txt-via-hn2'].' '.$_POST['txt-via2'] 
        .' -> '.$_POST['txt-via-hn3'].' '.$_POST['txt-via3']
        .' -> '.$_POST['txt-via-hn4'].' '.$_POST['txt-via4']
        .' -> '.$_POST['txt-via-hn5'].' '.$_POST['txt-via5']
        .' -> '.$_POST['txt-via-hn6'].' '.$_POST['txt-via6']
        .' -> '.$_POST['txt-via-hn7'].' '.$_POST['txt-via7']
        .' -> '.$_POST['txt-via-hn8'].' '.$_POST['txt-via8']
        .' -> '.$_POST['txt-via-hn9'].' '.$_POST['txt-via9']
        .' -> '.$_POST['txt-via-hn10'].' '.$_POST['txt-via10'];

現時点では、たとえば、2 つのビアを入力すると、データベース フィールドに次のように追加されます。

HOUSENUMBER ADDRESS -> HOUSENUMBER ADDRESS -> -> -> -> -> -> ->

私がしたいのは、テキストボックスの値が空の場合、最後に空のスペースを含めないようにすることです。したがって、ビアを 2 つだけ入力すると、次のビアのみが追加されます。

HOUSENUMBER ADDRESS -> HOUSENUMBER ADDRESS

これは可能ですか?

4

2 に答える 2

2

それらをすべて配列に追加し、それらを実行array_map()array_filter()て空の要素を取り除き、次にimplode()それらを次のように削除します。

$array = array();
foreach( range( 2, 10) as $i) {
    $array[] = $_POST['txt-via-hn' . $i] . ' ' . $_POST['txt-via' . $i];
}
$vias = implode( ' -> ', array_filter( array_map( 'trim', $array)));

次のように、ループ内で空の値をチェックして、への呼び出しを省略することもできますarray_filter()

$array = array();
foreach( range( 2, 10) as $i) {
    if( !empty( $_POST['txt-via-hn' . $i]) && !empty( $_POST['txt-via' . $i])) 
        $array[] = $_POST['txt-via-hn' . $i] . ' ' . $_POST['txt-via' . $i];
}
$vias = implode( ' -> ', $array);

$_POST定義されていないインデックスにアクセスしようとすると、どちらのアプローチでも通知が発生することに注意してください。これを修正するには、isset()読み取りを試みる前に を呼び出し$_POSTて、キーが設定されていることを確認します。

于 2012-07-03T12:48:26.177 に答える
0
for($i = 2; $i <= 10; $i++)
{
    if(strlen($_POST['txt-via2']))
        $array[] = $_POST['txt-via-hn'.$i] . ' ' .  $_POST['txt-via'.$i];
}

$vias = join("->", $array);
于 2012-07-03T12:49:52.640 に答える