21,887
社区成员
发帖
与我相关
我的任务
分享
<?php
$dat = array (
0 => array (
'eo_id' => 10,
'pt' => 'a',
'operation_id' => '>=',
'info' => 1,
'link' => 0,
),
1 => array (
'eo_id' => 11,
'pt' => 'b',
'operation_id' => '<',
'info' => 2,
'link' => 10,
),
2 => array (
'eo_id' => 12,
'pt' => 'c',
'operation_id' => '=',
'info' => 3,
'link' => 0,
),
3 => array (
'eo_id' => 13,
'pt' => 'd',
'operation_id' => '>',
'info' => 4,
'link' => 10,
),
4 => array (
'eo_id' => 15,
'pt' => 'e',
'operation_id' => '>=',
'info' => 5,
'link' => 0,
),
);
$result = '';
$first = 0;
foreach($dat as $v)
{
$exp = $v['pt'].$v['operation_id'].$v['info'];
if($v['link'] == 0) {
$result .= ($first++ == 0) ? $exp : " and " . $exp;
} else {
$result = "($result) or " . $exp;
}
}
print($result);
?>
Array
(
[0] => Array
(
[eo_id] => 10
[pt] => 'a'
[operation_id] => >=
[info] => 1
[link] => 0
)
[1] => Array
(
[eo_id] => 11
[pt] => 'b'
[operation_id] => <
[info] => 2
[link] => 10
)
[2] => Array
(
[eo_id] => 12
[pt] => 'c'
[operation_id] => =
[info] => 3
[link] => 0
)
[3] => Array
(
[eo_id] => 13
[pt] => 'd'
[operation_id] => >
[info] => 4
[link] => 12
)
[4] => Array
(
[eo_id] => 15
[pt] => 'e'
[operation_id] => >=
[info] => 5
[link] => 0
)
)
$sign = array_fill(0, count($tmp), '');
foreach($tmp as $i=>$v) {
$sign[$i+1] = ' and ';
if($v['link']) {
$sign[$i-$v['link']] .= '(';
$sign[$i] = ') or ';
}
}
array_pop($sign);
$s = '';//print_r($tmp);
foreach($sign as $i=>$v) $s .= $v . $tmp[$i]['pt'] .$tmp[$i]['operation_id'] . $tmp[$i]['info'] ;
$dat = array (
0 => array (
'eo_id' => 10,
'pt' => 'a',
'operation_id' => '>=',
'info' => 1,
'link' => 0,
),
1 => array (
'eo_id' => 11,
'pt' => 'b',
'operation_id' => '<',
'info' => 2,
'link' => 10,
),
2 => array (
'eo_id' => 12,
'pt' => 'c',
'operation_id' => '=',
'info' => 3,
'link' => 0,
),
3 => array (
'eo_id' => 13,
'pt' => 'd',
'operation_id' => '>',
'info' => 4,
'link' => 10,
),
4 => array (
'eo_id' => 15,
'pt' => 'e',
'operation_id' => '>=',
'info' => 5,
'link' => 0,
),
);
$k = '';
foreach($dat as $item) {
$st[$item['eo_id']] = array('', $item['pt'].$item['operation_id'].$item['info']);
if($item['link']) {
$st[$item['link']][0] .= '(';
$st[$item['eo_id']][0] = ') or ';
}else {
$st[$item['eo_id']][0] = $k;
}
$k = ' and ';
}
$s = '';
foreach($st as $item) $s .= join('', $item);
echo $s;
$dat = array(
array('a=1', 0), //我在这里加了一项
array('ko>11', 0),
array('ko>12', 0),
array('ko>13', 2),
array('ko>14', 0),
array('ko>15', 0),
array('ko>16', 5),
array('ko>14', 0),
);
$sign = array_fill(0, count($dat), '');
foreach($dat as $i=>$v) {
$sign[$i+1] = ' and ';
if($v[1]) {
$sign[$i-$v[1]] .= '(';
$sign[$i] = ') or ';
}
}
array_pop($sign);
$s = '';
foreach($sign as $i=>$v) $s .= $v . $dat[$i][0];
echo $s;
a=1 and ((ko>11 and ko>12) or ko>13 and ko>14 and ko>15) or ko>16 and ko>14
$arr=array(
0=>array('ko','>',11,0),
1=>array('ko','>',12,0),
2=>array('ko','>',13,2),
3=>array('ko','>',14,0),
4=>array('ko','>',15,0),
5=>array('ko','>',16,5),
6=>array('ko','>',17,0),
);
$str='';
$l="(";
$r=")";
foreach($arr as $key=>$val){
if($key==0){
if($val[3]==0){
$str.=$val[0].$val[1].$val[2];
}else{
$str.=$val[0].$val[1].$val[2];
}
}else{
if($val[3]==0){
$str.=' and '.$val[0].$val[1].$val[2];
}else{
$str=$l.$str;
$str.=$r.' or '.$val[0].$val[1].$val[2];
}
}
}
echo $str;
$arr=array(
0=>array('ko','>',11,0),
1=>array('ko','>',12,0),
2=>array('ko','>',13,2),
3=>array('ko','>',14,0),
4=>array('ko','>',15,0),
5=>array('ko','>',16,5),
6=>array('ko','>',17,0),
);
$str='';
$l="(";
$r=")";
foreach($arr as $key=>$val){
if($key==0){
if($val[3]==0){
$str.=$val[0].$val[1].$val[2];
}else{
$str.=$val[0].$val[1].$val[2];
}
}else{
if($val[3]==0){
$str.=' and '.$val[0].$val[1].$val[2];
}else{
$str=$l.$str;
$str.=$r.' or '.$val[0].$val[1].$val[2];
}
}
}
echo $str;
$dat = array(
array('ko>11', 0),
array('ko>12', 0),
array('ko>13', 2),
array('ko>14', 0),
array('ko>15', 0),
array('ko>16', 5),
array('ko>14', 0),
);
$stack = array();
$res = array();
foreach($dat as $v) {
if($v[1]) $stack = array( '(' . join(' and ', $stack) . ') or ');
$stack[] = $v[0];
}
echo join(' and ', $stack);
((ko>11 and ko>12) or and ko>13 and ko>14 and ko>15) or and ko>16 and ko>14
$data = array(
array(
'id0'=>1,
'id1'=>'ok',
'id2'=>'>',
'id3'=>11,
'id4'=>0
),
array(
'id0'=>1,
'id1'=>'ok1',
'id2'=>'>',
'id3'=>11,
'id4'=>0
),
array(
'id0'=>1,
'id1'=>'ok2',
'id2'=>'>',
'id3'=>8,
'id4'=>2
),
);
foreach($data as $key=>$val){
$str .= " {$val['id1']} {$val['id2']} {$val['id3']} ";
if($key + 1 >= count($data)){
break;
}
if($val['id4'] == 0){
$str .= "and";
}else{
$str .= "or";
}
}