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";}

现在,我想知道的很简单,有什么办法可以让这更简单吗?它适用于三个变量,但如果我要(例如)圈出整个字母表,如果我对统计数据的记忆是正确的,那就是 26!等于 4.0329146e+26。见鬼,连前 7 个字母都圈出来了,7!是我必须编码的 5040 种可能的组合。

我正在寻找的是不一定要回显“A和B”的东西,但是如果A是唯一发布到回显A的东西;如果发布 A 和 B 以回显“A”和“B”并在它们之间回显“and”;如果发布 A、B 和 C 以回显“A”、“B”和“C”,并在前两个之间回显一个“,”,并在倒数第二个和最后一个之间回显一个“and”。

我不知道我是否想要一个函数、一个类或其他东西。这可能是一个简单的问题到底运行,如果是,请原谅我的无知。

4

3 回答 3

2

对于像“A 和 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 回答