我有一个像这样的数组
Array
(
[0] => LK10110000
[1] => +
[2] => LK10120000
[3] => -
[4] => LK10130000
)
从该数组我想根据以下数组计算序列进行查询
预期结果:
Value = ResultMysql [LK10110000] + ResultMysql [LK10120000] - ResultMysql [LK10130000]`
答案 0 :(得分:2)
从您的问题和我理解的评论中,您有一个包含表达式的字符串,您需要运行一些查询并根据表达式计算结果。问题是你事先不知道这个表达。
我假设你的表达式只包含加法和减法。
如果它还包含乘法或除法,括号,函数或其他运算符,那么答案的其余部分不适用,它需要更复杂的代码来处理运算符优先级,括号和函数调用。 < / p>
0
初始化保存最终结果的变量。+
符号添加到数组中。add
还是subtract
)。代码比上面的描述更清晰:
// This is the input expression
$expression = 'LK10110000; +; LK10120000; -; LK10130000';
// Step 1
$total = 0;
// Step 2
$pieces = explode(';', $pieces);
if (count($pieces) % 2 != 1) {
// The expression is incorrect; handle the situation somehow
//
// A valid expression must contain an odd number of items
// (alternating value and operator, starting and ending with a value)
}
// Extra processing: remove the padding spaces from around the values
// to ensure testing the sign against '-' works correctly
$pieces = array_map('trim', $pieces);
// Step 3
array_unshift($pieces, '+');
// Step 4
do {
$sign = array_unshift($pieces);
$value = array_unshift($pieces);
// Step 5
// ... use $value here to generate and run the query
// ... put the value returned by the query in variable $result
$result = 1; // <-- replace this line
// Step 6
if ($sign === '+') {
$total += $result;
} elseif ($sign === '-') {
$total -= $result;
} else {
// This is an error in the expression; handle it somehow
}
// Step 7
} while (count($pieces));
// The output is in $total
echo($total);
如果查询没有返回单个数值但是一组记录($value
是标量,数组或对象的数组),那么在步骤6调整代码并使用{{1}的适当合并进入$value
。还使用正确的标量/数组/对象数组初始化$total
。
&#34;适当合并&#34; 的确切定义取决于您的应用程序规则。要实现它,您可能必须迭代$total
的元素,并为每个元素找到$value
中的相应元素并更新它或插入它(如果尚未存在)。