2011-06-28 17 views
1

私は、ユーザーがCMSに説明を含めていない場合、プレースホルダーメタ説明を作成しようとしています。空変数を考慮して文字列を作成するにはどうすればよいですか?

私は次のコードで開始しましたが、$phone,$location['zip']などの他の変数も空であれば失敗します。

<?php 
if (!empty($description)) { 
    echo '<meta name="description" content="' .$description . '">'; 
} 
else { 
    // Should return: Apple is a business located in Palo Alto, 95014. Call 408.996.1010... 
    $description = $name . ' is a ' . strtolower($category) . ' located in ' . $location['city'] . ', '; 
    $description .= $location['zip'] . '. Call ' . $phone . ' for more details today.'; 
    echo '<meta name="description" content="' . $description . '">';   
} ?> 

このように説明を作成する最も効率的な方法は何ですか?現在、私はネストされたif文だけを考えることができますが、これは面倒な音です。これを行うにはクリーンな方法が必要であると確信しています。行わ

/** 
* build a description based on various input variables 
* @return string 
*/ 
function build_description($description, $name, $category, array location, $phone) { 
    // build the description as you see fit. 
} 

$description = build_description(compact('description', 'name', 'category')); 
$metaDescription = sprintf('<meta name="description" content="%s"', htmlspecialchars($description)); 

は、build_description内の具体的な実装は、多くのを含めることができます説明として

+0

私は理解していない「が、他の変数のいずれかがあまりにも空になっている場合はもちろん、それは失敗します。」 - 言い換えてください – Phliplip

+0

なぜそれは乱雑に聞こえるのですか? – hakre

答えて

1

値が設定されているかどうかをチェックする関数を追加しますか?

すなわち

function checkData($data) { 
    if(!empty($data)) { 
     return $data; 
    } else { 
    return ''; 
    } 
} 

$description = checkData($name) . ' is a ' . strtolower(checkData($category)) . ' located in ' . checkData($location['city']) . ', '; 
0

は、入力に応じて変化何かが、それをカプセル化するために、それ自身の関数やクラスに入れてありますプログラムの残りの部分はあたかも単純なもののように扱うことができます。

しかし、これはその関数内でどのようにコード化するかについては答えていません。しかし、その関数の出力のデータは、その関数の入力に大きく依存するため、引数が課しているすべての側面だけを扱うことができます。

+0

クラスの中にメソッドとして入れることを計画していましたが、渡されたパラメータの1つが空の場合に何が起こるかの問題は解決しません。 –

0

定義されている他の変数は、文字列ではなくオブジェクトの一部です。 この場合、これらの変数の1つが空の場合にtrueを返すDescription-> isEmpty()を呼び出す方が簡単です。

この設定では、まだ配列を作成できます。 $ myArray = array($ name、$ category、...); をチェックし、おそらくin_array( ''、$ myArray)の戻り値をチェックインする

関連する問題