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字符串的主要内容,如果未能解决你的问题,请参考以下文章

PHP递归函数返回值

scala中的特别函数递归地连接两个列表:不使用“concat”

MySQL 的 GROUP_CONCAT 函数详解

php写函数 根据子类(id)递归查找顶级父类(id) 返回父类名字 (表结构:id name pid)

php 递归流程详细解析

MySql 递归查询