PHP,数组

时间:2015-07-07 06:40:06

标签: php mysql arrays

我有一个像这样的数组

Array
(
   [0] => LK10110000
   [1] => +
   [2] => LK10120000
   [3] => -
   [4] => LK10130000
)

从该数组我想根据以下数组计算序列进行查询

预期结果:

 Value = ResultMysql [LK10110000] + ResultMysql [LK10120000] - ResultMysql [LK10130000]`

1 个答案:

答案 0 :(得分:2)

从您的问题和我理解的评论中,您有一个包含表达式的字符串,您需要运行一些查询并根据表达式计算结果。问题是你事先不知道这个表达。

我假设你的表达式只包含加法和减法。

如果它还包含乘法或除法,括号,函数或其他运算符,那么答案的其余部分不适用,它需要更复杂的代码来处理运算符优先级,括号和函数调用。 < / p>

想法

  1. 使用0初始化保存最终结果的变量。
  2. 将您的字符串拆分成碎片。
  3. +符号添加到数组中。
  4. 从阵列中取出前两个部分。第一个是标志,第二个是变量。
  5. 使用变量作为参数编写并运行查询。
  6. 将查询返回的值添加或减去最终结果(检查在步骤4中检索到的符号,以了解它是add还是subtract)。
  7. 如果阵列中仍有未处理的碎片,请从步骤4开始重复。
  8. 代码

    代码比上面的描述更清晰:

    // 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中的相应元素并更新它或插入它(如果尚未存在)。