我从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 :(得分:1)
您只需要将条目初始化为0:
while($row = $result->fetch(PDO::FETCH_ASSOC)) {
if(!isset($sumArr[ $row['utilizator'] ])) $sumArr[ $row['utilizator'] ] = 0;
$sumArr[ $row['utilizator'] ] += $row['cantitate'];
}
if行将在$row['utilizator']
数组中创建$sumArr
条目,并将其值初始化为0.
你遇到的问题是你用字符串初始化它我想:
$sumArr[ $row['meniu_name'] ] = $row['meniu_name'];
IMO $row['meniu_name']
是一个字符串。然后,当你对字符串添加时,PHP倾向于将此字符串转换为整数,这会给你带来奇怪的结果。
答案 1 :(得分:0)
您需要首先学习SQL:如下面的清单所示,您可以在一个查询中完成所有这些操作,这比尝试拖动所有数据和然后处理它。
SELECT nume, prenume, email, telefon, utilizator, sum(cantitate)
FROM comenzi, utilizatori WHERE id = utilizator GROUP BY utilizator