2017-08-10 13 views
-1

私は、操作を実行する前にたくさんの文字列が空であるかどうかをチェックしたいという状況があります。私は手動で一つ一つの文字列でこのチェックを実行する必要がありますする必要はありませんので、私はこのようになります機能でそれを置く:文字列内の変数を引数として渡します

function format_field($field_name, $format) { 
    $value = get_field($field_name); 
    if ($value != "") { 
    return $format; 
    } 
    return ""; 
} 

この関数の呼び出しは次のようになります。

format_field('website', "<p><strong>Website:</strong><a href=\"$value\">$value</a></p>"); 

$valueを文字列にformat_field()に渡すと、$valueという値が返される前に関数内で展開されることが期待されていましたが、そうではないようです。

これはすべて可能ですか、間違っていますか?

私はまたsprintf()について知っていますが、$valueは文字列内で複数回参照することができますので、理想的ではありません。

+0

あなたは出力がする何をしたいですか? 'ウェブサイト'に文字列がある場合は ''ウェブサイト:something ''と言ったり、出力全体を完全に省略したりしますか? – Andy

+0

関数内の変数 '$ value'は、関数を呼び出すコードの変数とは異なります。 [variables scope](http://php.net/manual/en/language.variables.scope.php)についての詳細を読む。 – axiac

+0

'$ value'を' format_field(arg1、arg2) 'に2番目の引数として渡してから、関数の中で関数の中で動作させてください。もちろん' get_field() '関数を@アンディは以下のコメントで述べた –

答えて

1

コードに問題があります。を関数引数として渡すと、$value変数は後で関数ブロックに代入されません。あなたは$value = 'https://a.b.c';を持っている場合

だから例えば$formatの値は、あなたが試みることができる何"<p><strong>Website:</strong><a href=\"https://a.b.c\">https://a.b.c</a></p>"

なり、例えば

は、そのようなものを使用し、$format引数として"<p><strong>Website:</strong><a href=\"{value}\">{value}</a></p>"を渡し、代替プレースホルダーです。

$format = "<p><strong>Website:</strong><a href=\"{value}\">{value}</a></p>";

$value = 'https://www.google.com';

012実際に返す

echo preg_replace('#\{value\}#i', $value, $format);

は:<p><strong>Website:</strong><a href="https://www.google.com">https://www.google.com</a></p>

+0

ありがとう、私はこれに行った。私は変数名を使うことができればいいと思っていました。なぜなら、これは将来これを管理する人には明らかですが、値を置き換えるだけでうまくいきます。 – Alex

関連する問題