将字符串转换为php参数

将字符串转换为php参数,php,string,function,arguments,Php,String,Function,Arguments,假设我有一个函数: function j($a, $b){ return $a + $b; } 然后我将函数的预期参数放入字符串中: $str = '1,3'; 有没有一种方法可以使函数将单个字符串参数当作程序员插入函数的参数来处理……那么当您这样做时 j($str) 与其让函数将$str作为单个字符串参数处理,不如获取字符串的内容,并将其视为程序员编写的j(1,3)而不是j($str) 另外,这是一个相当简单的示例,但我希望它适用于更复杂的参数字符串,包括数组、多维数组、关联数组、数组中

假设我有一个函数:

function j($a, $b){
 return $a + $b;
}
然后我将函数的预期参数放入字符串中:

$str = '1,3';
有没有一种方法可以使函数将单个字符串参数当作程序员插入函数的参数来处理……那么当您这样做时

j($str)

与其让函数将$str作为单个字符串参数处理,不如获取字符串的内容,并将其视为程序员编写的
j(1,3)
而不是
j($str)

另外,这是一个相当简单的示例,但我希望它适用于更复杂的参数字符串,包括数组、多维数组、关联数组、数组中的数组,以及包含逗号的字符串参数(因此仅按逗号分解是不可行的)

另外,我不希望在解决方案中使用eval()

编辑
此外,我还试图使其适用于任何函数,而不仅仅是我的函数(也不仅仅是这个特定函数,它只是一个毫无价值的示例函数),因此最好是在函数之外执行操作

这应该适用于单个逗号分隔的字符串:

function j($str){
 list($a, $b) = explode(',', $str);
 return $a + $b;
}
在多维数组中要求和什么?所有的价值观


如果是:只需检查参数的类型(例如,使用is_array()),然后迭代。当它是多维的时,递归调用函数。

使除第一个参数之外的所有参数都是可选的,然后使用,如果第一个参数是字符串(或包含
):

这只是一个基本的例子,但原则应该明确:

  • 检查其中一个参数是否由多个参数组成
  • 如果是这样,您可以自己解析它以获得单个参数
现在,您的函数将支持两种格式,只有一个参数,例如:

$str = '1,3'
j($str);
以及两个论点:

j(5, 10);

我不知道您希望如何使“更复杂的参数字符串,包括数组的数组”工作,因为很难将它们表示为字符串。如果您可以将任何字符串格式化为数组,例如使用JSON字符串和
JSON\u decode
call\u user\u func\u array
就是您的朋友。

这很有效:)

检查它:

f("6;array(8,9);array(array(1,0,8), 5678)");

大多数答案都假设,一切都与昏迷很好地分开,但情况并非总是如此。例如,可能有不同的变量类型,甚至是带有coma的字符串

$values = "123, 'here, is, a, problem, that, can\'t, be, solved, with, explode() function, mkay?'";
这可以通过PHP7中的eval()和dot的“…”参数来处理

function helper_string_args(...$args) {
    return $args;
}

$func = "\$values = \\helper_string_args($values);";
try {
    eval($func);
} catch (Exception $e) {
    var_dump($e);
    exit;
}

请参阅:这也是一个相当简单的示例,但我希望它适用于更复杂的参数字符串,包括数组、多维数组、关联数组、数组中的数组,以及包含逗号的字符串参数(因此仅按逗号分解是不可行的)@kamikaze_pilot这需要在每个案例的基础上进行,如果你给我们一个真实世界的例子,说明你试图实现的目标,我们可以提供帮助-但是对于任何给定的情况,答案可能与另一个完全不同…例如字符串数组(数组(1))'应作为一个变量进行计算,该变量是一个数组,该数组包含另一个数组,该数组包含1若要在不使用
eval
的情况下执行此操作,您将需要一些自定义字符串解析函数。不过,您可以很容易地选择json解码(“[[1]]”,true)。一般来说,文本PHP并不是将复杂数据结构表示为字符串的最佳选择。为此,请使用为此而设计的格式,如JSON或序列化PHP。
function f($str, $delimiter = ';')
{
    $strargs = explode($delimiter, $str);
    $args = array();
    foreach($strargs as $item)
        eval("\$args[] = " . $item. ";");
    // $args contains all arguments
    print_r($args);
}
f("6;array(8,9);array(array(1,0,8), 5678)");
$values = "123, 'here, is, a, problem, that, can\'t, be, solved, with, explode() function, mkay?'";
function helper_string_args(...$args) {
    return $args;
}

$func = "\$values = \\helper_string_args($values);";
try {
    eval($func);
} catch (Exception $e) {
    var_dump($e);
    exit;
}