1

我正在从数据库中检索一些数据,其中的值可能类似于以下内容:

Column1 | Column2
-----------------
Bob     | 24
Joe     | 17
Jimmy   | 38
Joe     | 10
Bob     | 5
Sam     | 8

有了这些数据,我想以某种方式选择 Bob 行并将它们相乘。我想对 Column1 中匹配的所有行执行此操作。我不关心在 SQLite 中这样做,但是在 PHP 中解决这个问题的最佳方法是什么?我目前通过执行以下操作将结果添加到 PHP 中的数组中:

$myArray[$resultRow['Column1']] = $resultRow['Column2'];

我想知道如何进行导航并找到匹配的键,将它们的值相乘,并输出类似

Column1 = Column2-a * Column2-b

4

2 回答 2

1

考虑这段代码:

$results = array();
foreach(array('Bob' => 24, 'Joe' => 17, 'Jimmy' => 38, 'Joe' => 10, 'Bob' => 5, 'Sam' => 8) as $key => $val){
 $results[$key][] = $val;
}
echo  '<pre>';
print_r($results);
echo  '</pre>';

输出:

Array
(
    [Bob] => Array
        (
            [0] => 5
        )

    [Joe] => Array
        (
            [0] => 10
        )

    [Jimmy] => Array
        (
            [0] => 38
        )

    [Sam] => Array
        (
            [0] => 8
        )

)

PHP 忽略重复键,当您从数据库中检索数据时,您必须创建 $results 数组,假设您这样做:

while () {
    $col1 = $row["col1"];
    $col2 = $row["col2"];
    $results[$col1][] = $row["col2"];
}

现在结果数组必须是这样的:

Array
(
    [Bob] => Array
        (
            [0] => 24
            [1] => 5
        )

    [Joe] => Array
        (
            [0] => 17
            [1] => 10
        )

    [Jimmy] => Array
        (
            [0] => 38
        )

    [Sam] => Array
        (
            [0] => 8
        )

)

现在,很容易像这样搜索 colmun1 名称:

$values_for_colmn1 = $results[$column1]; //which is an array

// 对数组乘积使用 array_product() 函数

$product_for_column1 = array_product($values_for_colmn1);
于 2013-01-29T07:41:49.770 回答
1

首先,只读取 Bob 的值:

$stmt = $db->prepare('SELECT Column2 FROM MyTable WHERE Column1 = ?')
$stmt->bindValue(1, 'Bob', SQLITE3_TEXT);
$result = $stmt->execute();

然后,将它们全部相乘:

$value = 1.0;
while ($res = $result->fetchArray()) {
    $value = $value * $res['Column2'];
}
于 2013-01-29T08:04:51.317 回答