2016-09-20 11 views
1

phpでpdfを構築していて、UTF-8形式であるため、文字列が機能しないことに気づきました。 utf8_decode($str)はうまく動作しますが、私はこのようにデコードしなければならない多くの変数を持っています。複数のPHP変数を簡単に上書き/変更する方法

function makePDF(titleStr, bodyStr, headerStr, and more...) 
{ 

    //TO-DO 

    $pdf->Cell(20, 6, $titleStr, 1, 1, 'L', false); 
    $pdf->Cell(15, 6, $bodyStr, 1, 1, 'L', true); 
    $pdf->Cell(50, 6, $headerStr, 1, 1, 'R', false); 
} 

は私が既に持っている各変数のためにこれを行うために有するか又は他のコードを変更せずに、一度ループか何かでそれらすべてをデコードする方法を見つけたい:私のコードは次のようになります

$titleStr = utf8_decode($titleStr); 
$bodyStr = utf8_decode($bodyStr); 
...and so on 

誰でも簡単にこれを行う方法はありますか?

+0

配列にこれらの文字列変数がありますか?そして、これをループ内で行うことができます。 – KhorneHoly

+1

どのような$ pdfのクラスを拡張し、Cell()メソッドをオーバーライドするのはどうでしょうか?親メソッドを呼び出す前に文字列をデコードするだけですか? – Andy

+0

ありがとう、私はそれを考えなかった!それはうまくいく! –

答えて

1

func_get_args()を使用してすべての関数の引数を読み取って、それらを取得するには、array_map()をUTF8デコードに適用し、list()を単純な文字列変数に戻すことができます。

<?php 

function makePDF($titleStr, $bodyStr, $headerStr) 
{ 
    $args = func_get_args(); 

    $args = array_map(function($args){ 
     return utf8_decode($args); 
    }, $args); 

    list($titleStr, $bodyStr, $headerStr) = $args; 

    var_dump($titleStr); 
    var_dump($bodyStr); 
    var_dump($headerStr); 
} 

makePDF('foo', 'bar', 'baz'); 

出力:

string(3) "foo" 
string(3) "bar" 
string(3) "baz" 

あなたのメソッドのシグネチャがlist()呼び出しにコピー/ペーストする必要がありますが、それはかなり簡単です。楽しみのために


あなたはコピー/ペーストステップをスキップしたい場合、あなたはget_defined_vars()ためfunc_get_args()に切り替えると引数を再割り当てするvariable variablesを使用することができます。

<?php 

function makePDF($titleStr, $bodyStr, $headerStr) 
{ 
    $args = get_defined_vars(); 

    $args = array_map(function($args){ 
     return utf8_decode($args) . rand(0,10); 
    }, $args); 

    foreach($args as $key => $arg){ 
     // The two $$ show that this is a variable variable. 
     $$key = $arg; 
    } 

    var_dump($titleStr); 
    var_dump($bodyStr); 
    var_dump($headerStr); 
} 

makePDF('foo', 'bar', 'baz'); 
string(4) "foo5" 
string(4) "bar5" 
string(4) "baz9" 

* array_map()呼び出し可能ファイルにrand()を追加して、割り当てが実際にここで行われていることを実証しました。

+0

おかげで、私はあなたの答えが本当に好きでした。なぜなら、それは私の問題を解決しただけでなく、私もたくさん学んだからです:) –

関連する問題