1

私はかなり長い間この問題を見ていて、ついに私の答えを作成しました。

異なる値を出力する 3 つの配列キーがあります。各キーの条件は true または NULL のいずれかになります。これは、配列が単純で次のように見えることをテストしているものです。

$a = array();
$a['Font'] = logix::templateParams('googleWebFont');
$a['Font2'] = logix::templateParams('googleWebFont2');
$a['Font3'] = logix::templateParams('googleWebFont3');

たとえば、1 つのキーが null の場合、2 つのキーが「NULL」の場合は出力が異なります。このようなコードをカバーするために必要な値の範囲をカバーする単純なスイッチを作成することができました。

$a = array();
$a['Font'] = logix::templateParams('googleWebFont');
$a['Font2'] = logix::templateParams('googleWebFont2');
$a['Font3'] = logix::templateParams('googleWebFont3');

switch (TRUE){


    // No font selected  
    case $a['Font'] == NULL && $a['Font2'] == NULL && $a['Font3'] == NULL:
        echo 'nothing';
        break;
    // First googlefont selected only
    case $a['Font'] && $a['Font2'] == NULL && $a['Font3'] == NULL:
        echo 'one';
        break;
    // Second googlefont selected only
    case $a['Font2'] && $a['Font'] == NULL && $a['Font3'] == NULL:
        echo 'two';
        break;
    // Third googlefont selected only
    case $a['Font3'] && $a['Font2'] == NULL && $a['Font'] == NULL:
        echo  'three';
        break;

    // and Continues to cover another 10 more states....... 

これまでのところ、これは問題なく機能し、カバーする必要がある可能性のある各バリエーションをカバーしています。これを行うためのより柔軟な方法があるかどうか疑問に思っていました。たとえば、別の配列値を追加して集合の状態を比較したい場合、このソリューションは柔軟ではありません。スイッチのケースを完全に書き直す必要がありますが、これは避けられませんが、これを行うより効率的な方法があります。PHP はまったく初めてですが、OOP について少し読んだことがあります。私が達成しようとしていることをより明確にするために。

// 1. collect the array keys
// 2. evaluate keys and check for certain conditions
// 3. output based on conditions  

これを行うより柔軟な方法はありますか?

よろしく

w9914420

4

2 に答える 2

0

あなたがしようとしているのは、3 つのケースのすべてのバイナリの組み合わせを見つけることです。これで、true または null の 3 つのキーができました。したがって、2x2x2 = 8 つの組み合わせがあります。

最初のステップは、各ケースをその番号で評価することです。たとえば、FFT = 1、FTT = 3、TTT = 7 などです。

たとえば、 case $a['Font'] == NULL && $a['Font2'] == NULL && $a['Font3'] == NULL: = FFF すべてのケースで値が NULL であるため、値が評価されます。 000 に = 0 10 進数。

$a['Font'] && $a['Font2'] == NULL && $a['Font3'] == NULL: = 100=4 の 10 進数に評価される TFF。

ここでのコツは、各フォントの重みが異なることです。Font3 は 1、Font2 は 2、Font3 は 4、Font4 (将来用) は 8 です。

この値を計算したら、スイッチの各ケースを一致させることができます。

    case '0':
    echo 'nothing';
    break;
    // First googlefont selected only
    case '1':
    echo 'one';
    break;

4 つのキーがある場合でも、FFFT=1、FFTF = 2 などとして評価できます。スイッチは同じままで、追加のケースを追加するだけで済みます。

于 2013-05-07T19:52:43.820 に答える