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 )
それらの値に到達する数学的な方法さえ理解できず、正しい方向に導くことができるものを見つけることができないため、困惑しています。