将字符串转换为php参数

时间:2011-10-24 08:29:15

标签: php string function arguments

所以假设我有一个功能:

function j($a, $b){
 return $a + $b;
}

然后我将函数的预期参数放入一个字符串中:

$str = '1,3';

有没有办法让函数将单个字符串参数视为程序员插入函数的参数....所以当你这样做时

j($str)

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

这也是一个相当简单的例子,但我希望它适用于更复杂的参数字符串,包括数组,多维数组,关联数组,数组中的数组,以及包含逗号的字符串参数(所以只是用逗号爆炸是不可行的)

我也不想在解决方案中使用eval()

修改

此外,我试图让这个功能不仅仅是我的(而不仅仅是这个特定功能,这只是一个毫无价值的示例函数),所以最好是在函数之外进行操作

6 个答案:

答案 0 :(得分:1)

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

function j($str){
 list($a, $b) = explode(',', $str);
 return $a + $b;
}

您希望在多维数组中求和?所有的值?

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

答案 1 :(得分:1)

创建所有参数,但第一个参数除了可选,如果第一个参数是字符串(或包含,),则使用list()explode()

function j($a, $b=null){
  if(strpos($a,',')!==false){
    list($a,$b) = explode(',',$a)
  }
  return $a + $b;
}

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

  • 检查其中一个参数是否由多个参数组成
  • 如果是,请自行解析以获取单个参数

答案 2 :(得分:1)

function j($a, $b = 0){ // make second arg optional
  if (! $b) { // is second arg specified and not zero
    if (strpos($a, ',') !== false){ // has provided first arg a comma
       list($first, $second) = explode(',' $a); // yes then get two values from it
       return $first + $second; // return the result
    }
  }
  else {
     return $a + $b; // two args were passed, return the result
  }

}

现在你的函数将支持两种格式,例如:

$str = '1,3'
j($str);

以及两个论点:

j(5, 10);

答案 3 :(得分:0)

call_user_func_array('j', explode(',', $str));

http://www.php.net/call_user_func_array

我不知道你想如何使“更复杂的参数字符串包括数组数组”,因为很难将它们表示为字符串。如果你可以将你拥有的任何字符串格式化为数组,例如使用JSON字符串和json_decodecall_user_func_array就是你的朋友。

答案 4 :(得分:0)

这有效:)

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)");

答案 5 :(得分:0)

大多数答案都假定,所有内容都用逗号“,”很好地分隔开了,但并非总是如此。例如,可能有不同的变量类型,甚至是带有逗号的字符串。

$values = "123, 'here, is, a, problem, that, can\'t, be, solved, with, explode() function, mkay?'";

这可以通过eval()和php 7中点的“ ...” args检索来处理。

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

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