PHP递归函数返回concat字符串
Posted
技术标签:
【中文标题】PHP递归函数返回concat字符串【英文标题】:PHP recursion function return concat string 【发布时间】:2022-01-06 00:55:45 【问题描述】:我有以下数组
[
["client_code","contains","12"],
"and",
[
["trade_name","=","KeyWholesaler"],
"or",
["trade_name","=","Cash&Carry"]
],
"and",
[
"!",
["state","=","B-BigCantina"],
["state","=","B-BigCantina2"]
],
"and",
["client_name","contains","M"]
]
我做了一个函数,将上面的数组echo
递归到mysql
where 查询。我知道这很混乱,但我能做的就是让它发挥作用。
function testing($array)
if(is_array($array) && count($array) == count($array, COUNT_RECURSIVE))
$is_not = $_SESSION["NOT"];
$and = $_SESSION["NOT"] ? " AND" : "";
echo "`$array[0]` $is_not$array[1] '$array[2]' $and";
echo "";
else if(is_array($array))
echo "(";
foreach ($array as $key => $value)
testing($value);
echo ")";
$_SESSION["NOT"] = "";
else if($array == "!")
$_SESSION["NOT"] = "!";
else
echo $array;
echo "";
使用给定数组的以下函数的输出为
(`client_code` contains '12' and(`trade_name` = 'KeyWholesaler' or`trade_name` = 'Cash&Carry' )and(`state` != 'B-BigCantina' AND`state` != 'B-BigCantina2' AND)and`client_code` contains '21' )
现在这个函数只是回显下面的输出,但我想把它变成一个变量。
抱歉所有格式和糟糕的英语。 :)
【问题讨论】:
数组格式是否在你的控制范围内?这是一种令人困惑/不精确/不是最好的格式。 here’s an example 的格式更容易解析。 其实是来自一个叫DevExtreme DataGrid的插件 【参考方案1】:您可以从函数内部返回并附加为字符串以使函数递归
function testing($array)
if(is_array($array) && count($array) == count($array, COUNT_RECURSIVE))
$is_not = $_SESSION["NOT"];
$and = $_SESSION["NOT"] ? " AND" : "";
return "`$array[0]` $is_not$array[1] '$array[2]' $and";
else if(is_array($array))
$val = "";
foreach ($array as $key => $value)
$val = $val . testing($value);
$_SESSION["NOT"] = "";
return "(".$val.")";
else if($array == "!")
$_SESSION["NOT"] = "!";
else
return $array;
echo testing([]);
【讨论】:
以上是关于PHP递归函数返回concat字符串的主要内容,如果未能解决你的问题,请参考以下文章
scala中的特别函数递归地连接两个列表:不使用“concat”