【问题标题】:PHP recursion function return concat stringPHP递归函数返回concat字符串
【发布时间】: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的插件

标签: php mysql recursion


【解决方案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([]);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-05-27
    • 1970-01-01
    • 2013-09-21
    • 1970-01-01
    • 2020-09-25
    • 2018-08-28
    • 2012-03-11
    相关资源
    最近更新 更多