如何轻松覆盖/更改多个php变量

时间:2016-09-20 13:57:47

标签: php loops variables encode

我正在使用php构建一个pdf,并注意到我的字符串不起作用,因为它们是UTF-8格式。 utf8_decode($str)工作正常,但我有很多变量,我必须以这种方式解码。我的代码看起来像这样:

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

任何人都知道如何更容易地做到这一点?

1 个答案:

答案 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()调用中,但这很简单。

为了好玩,如果您想跳过复制/粘贴步骤,可以切换func_get_args() get_defined_vars()并使用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"

*我已在rand() callable中添加了array_map(),以证明该作业实际上已在此处进行。