为了账号安全,请及时绑定邮箱和手机立即绑定

PHP中将多维数组转换为条件表达式

PHP中将多维数组转换为条件表达式

PHP
函数式编程 2021-09-18 16:02:25
我正在尝试将数组转换为类似条件的表达式字符串,该字符串将在JS Filtrex库中使用。JS 部分与此问题无关。以下是我正在尝试使用的示例 PHP 数组。$condition = array(    'and',    array(        array(            'field' => 'show_image',            'compare' => '==',            'value' => 1        ),    ),    array(        'or',        array(            'field' => 'filter',            'compare' => '!=',            'value' => 1        ),        array(            'field' => 'align',            'compare' => '==',            'value' => 'left'        )    ));结果字符串将是这样的:show_image == 1 and ( filter != 1 or align == "left" )我不卖数组结构,所以你可以自由修改数组,只要它可以用更多条件扩展。提前致谢。
查看完整描述

2 回答

?
慕标琳琳

TA贡献1830条经验 获得超9个赞

我不知道它是否适用于所有情况,但在您的情况下效果很好(我猜)


我建议你删除嵌套数组$condition[1]并直接写入$condition[1][0]数组(新的数组结构在下面的代码中)


<?php


$condition = array(

    'and',

    array(

            'field' => 'show_image',

            'compare' => '==',

            'value' => 1

    ),

    array(

        'or',

        array(

            'field' => 'filter',

            'compare' => '!=',

            'value' => 1

        ),

        array(

            'field' => 'align',

            'compare' => '==',

            'value' => 'left'

        )

    )

);


function generateExpression( Array $condition ) : String

{

 return $condition['field'] . " " . $condition['compare'] . " " . $condition['value'];

}


function generateConditionExpression ( Array $conditionTree ) : String

{

  if ( array_key_exists("field",$conditionTree)  ) 

  {

     return generateExpression($conditionTree);

  }

  //else

  return "(" . generateConditionExpression( $conditionTree[1] ) . " " . $conditionTree[0] . " " . generateConditionExpression( $conditionTree[2] ) . ")";


}


echo generateConditionExpression($condition);


查看完整回答
反对 回复 2021-09-18
  • 2 回答
  • 0 关注
  • 149 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信