0

さて、すべてのコードが機能しているので、もっと簡単な方法があるかどうか知りたいだけです。コード:

if($_POST['A'] == ""){echo "A";}
if($_POST['B'] == ""){echo "B";}
if($_POST['C'] == ""){echo "C";}
if($_POST['A'] == "" && $_Post['B'] == ""){echo "A and B";}
if($_POST['A'] == "" && $_Post['C'] == ""){echo "A and C";}
if($_POST['B'] == "" && $_Post['C'] == ""){echo "B and C";}

今、私が知りたいのはかなり単純なことですが、これを簡単にする方法はありますか? これは 3 つの変数でかなりうまく機能しますが、(たとえば) アルファベット全体を丸で囲むと、統計に関する私の記憶が正しければ、26 になります! これは 4.0329146e+26 です。地獄、最初の7文字を丸めても、7!私がコーディングしなければならない5040の可能な組み合わせです。

私が探しているのは、「AとB」を正確にエコーする必要がないものですが、AがエコーAに投稿された唯一のものである場合です。A と B が "A" と "B" をエコーし​​、その間に "and" をエコーするように投稿された場​​合。また、A、B、および C が「A」、「B」、および「C」をエコーし​​、最初の 2 つの間に「,」をエコーし​​、最後から 2 番目と最後の間に「and」をエコーするように投稿された場​​合。

関数が必要なのか、クラスが必要なのか、それとも何か他のものが必要なのかわかりません。これはおそらく最終的には簡単な質問です。もしそうなら、私の無知を許してください。

4

3 に答える 3

2

「A and B」のような単純なメッセージの場合、次のようにします。

$variables = range('A', 'Z');
echo implode(' and ', $variables);

$_POST がある場合は、次のことができます。

if($_POST){
    echo implode(' and ', array_keys($_POST));
}
于 2013-04-02T20:56:16.487 に答える
1
function format_list( $items )
{
    if ( count( $items ) == 0 )
        return '';
    if ( count( $items ) == 1 )
        return $items[0];

    $last_item = array_pop( $items );
    $list_text = join( ', ', $items ) . ' and ' . $last_item;

    return $list_text;
}

$items = array();
$keys = array( 'A', 'B', 'C' );
foreach ( $keys as $key )
{
    if ( !empty( $_POST[$key] ) )
        $items[] = $key;
}
echo format_list( $items );
于 2013-04-02T21:05:38.070 に答える
0
$count = count($_POST);
$a = 1;
$str = '';
foreach ( $_POST as $key => $value )
{
     // if u wanna use values just replace $key to $value
     if ( $count > $a++ )
         $str .= $key . ', ';
     else
     {
         $str = rtrim( $str, ', ' );
         $str .= ' and ' . $key;
         $str = ltrim( $str, ' and ' );
     }
}
于 2013-04-02T21:04:55.410 に答える