簡體   English   中英

總和那里的鍵值是相同的

[英]Sum array values there key is the same

我正在從MySQL中提取一些數據,然后嘗試對鍵相同的結果數組的值求和。 我在這段代碼中就已經做到了:

$q = "SELECT * FROM comenzi";
        $result = $odb->query($q);

        $sumArr = array();
        while($row = $result->fetch(PDO::FETCH_ASSOC)) {
            if ( !isset($sumArr[ $row['meniu_name'] ]) ) {
                $sumArr[ $row['meniu_name'] ] = $row['meniu_name'];
            }
            $sumArr[ $row['meniu_name'] ] += $row['cantitate'];
        }
        arsort($sumArr);
        $rowCount = 1;
        echo "<table><tr id='tableHeader'><td>#</td><td>produs</td><td>cantitate</td></tr>";
        foreach ($sumArr as $key => $value) {
            echo "<tr><td>" . $rowCount . "</td><td>" . $key . "</td><td>" . $value . "</td></tr>";
            $rowCount++;
        }
        echo "</table>";

那是我的工作示例,使我們進入下一個有點相似的示例,但是由於某些原因,它沒有產生所需的結果:

$q = "SELECT * FROM comenzi";
        $result = $odb->query($q);

        $sumArr = array();
        while($row = $result->fetch(PDO::FETCH_ASSOC)) {
            if ( !isset($sumArr[ $row['utilizator'] ]) ) {
                // $sumArr[ $row['utilizator'] ] = $row['utilizator'];
            }
            $sumArr[ $row['utilizator'] ] += $row['cantitate'];
        }
        arsort($sumArr);
        print_r($sumArr);
        $rowCount = 1;
        echo "<table><tr id='tableHeader'><td>#</td><td>utilizator</td><td>cantitate produse</td></tr>";
        foreach ($sumArr as $k => $v) {

            $odb                =           new PDO("mysql:host=".$host.";dbname=".$db, $user, $pass);

            $stmtCheck  =       $odb->prepare('SELECT nume, prenume, email, telefon FROM utilizatori WHERE id=?');
            $stmtCheck->execute(array($k));
            $r = $stmtCheck->fetch();


            echo "<tr><td>" . $rowCount . "</td><td>" . "<b>nume: </b>" . $r[0] . "<b> prenume: </b>" . $r[1] . "<b> email: </b>" . $r[2] . "<b> telefon: </b>" . $r[3] . "</td><td>" . $v . "</td></tr>";
            $rowCount++;
        }
        echo "</table>";

這里發生的事情令人懷疑:注釋行// $sumArr[ $row['utilizator'] ] = $row['utilizator']; ,如果將其注釋掉,我將獲得預期的結果,但是將其注釋掉,則會得到以下錯誤:

注意:未定義的偏移量

如果我不注釋該行,則不會得到未定義的偏移量錯誤,但是我的值很可笑。

正確值: Array ( [22] => 19 [32] => 11 )
沒有注釋掉該行的值: Array ( [32] => 43 [22] => 41 )

我什至無法理解達到這些值的數學方法,找不到任何可以給我正確方向的東西,因此我感到困惑。

您只需將條目初始化為0:

while($row = $result->fetch(PDO::FETCH_ASSOC)) {
    if(!isset($sumArr[ $row['utilizator'] ])) $sumArr[ $row['utilizator'] ] = 0;
    $sumArr[ $row['utilizator'] ] += $row['cantitate'];
}

if行將在$sumArr數組中創建$row['utilizator']條目,並將其值初始化為0。

您遇到的問題是您使用一個我認為的字符串初始化了它:

$sumArr[ $row['meniu_name'] ] = $row['meniu_name'];

IMO $row['meniu_name']是一個字符串。 然后,當您對字符串進行加法運算時,PHP傾向於將該字符串轉換為整數,這會給您帶來奇怪的結果。

您需要首先學習SQL:如下面的清單所示,您可以在一個查詢中完成所有這些操作,這比嘗試拖拽所有數據然后處理它們既簡單又有效。

SELECT nume, prenume, email, telefon, utilizator, sum(cantitate) 
FROM comenzi, utilizatori WHERE id = utilizator GROUP BY utilizator

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM