使用不同分隔符内爆数组元素的智能方法

问题描述 投票:0回答:1

我有多种不同的选项来分发一些记录。选项包括 Word、Excel、PDF 和电子邮件。

根据后端勾选的选项,前端将提供相应的选项进行共享。问题是我需要准备一份描述性文本作为此事的说明。各种情况的文本将是这样的:

您可以下载Word、Excel、PDF格式的选定记录,或发送 他们到您的电子邮件。 (当所有四个选项均启用时)。

您可以下载Word、PDF格式的选定记录,或发送至 你的邮件。 (当启用 Word、PDF 和电子邮件选项时)。

您可以下载Word或PDF格式的选定记录。 (当 Word 和 PDF 选项已启用)。

您可以在Word中下载选定的记录,或将它们发送到您的 电子邮件。 (当启用 Word 和电子邮件选项时)。

您可以将选定的记录发送到您的电子邮件。 (当只有电子邮件 已启用)。

还有其他组合,但棘手的情况是根本未启用电子邮件选项,或者仅启用电子邮件选项。在所有其他情况下,据我所知,除了最后一个之外的所有选项都应该用

,
连接,最后一个选项应该用
, or
与前面的选项连接。

启用所有选项时,顺序将始终相同:Word、Excel、PDF、电子邮件。

有人可以尝试生成一种算法来自动准备上述描述性文本,而不必采用所有不同的组合吗?

TIA。

编辑:可以存在多少种不同的组合?

php arrays implode
1个回答
0
投票

没有什么技巧可讲,只是列出所有不同的分支。但只有当你有很多选择时,你才能减少代码量。 https://3v4l.org/fYcMc

function outputOptions(array $options){
    if ($options[0] == 'email') {
        echo "You can send the selected records to your email.";
    } else {
        echo "You can download the selected records in $options[0]";
        $last = count($options) - 1;
        
        if($last == 0)
            echo '.';
        else {
            for($i = 1; $i < $last; $i++)
                echo ", $options[$i]";
            
            echo $options[$last] == 'email' ?
                ', or send them to your email.' :
                ", or $options[$last].";
        }
    }
    echo "\n";
}

outputOptions(['Word']);
outputOptions(['Word', 'Excel']);
outputOptions(['Word', 'PDF']);
outputOptions(['Word', 'Excel', 'PDF']);

outputOptions(['email']);
outputOptions(['Word', 'email']);
outputOptions(['Word', 'Excel', 'email']);
outputOptions(['Word', 'PDF', 'email']);
outputOptions(['Word', 'Excel', 'PDF', 'email']);
© www.soinside.com 2019 - 2024. All rights reserved.