2016-07-12 7 views
1

私はmysql_fetch_assocによって配列された配列を持っています。配列にデータベースから必要な列が移入された後、配列の別のキーを追加したいと思います。私はforeachループでこれを達成しようとしましたが、私の関数は配列を返していません。どこが間違っていたのですか?関数内に新しい配列キーを追加します

//calculates payout 
function calculate_payout($id){ 
    $result = mysql_query("SELECT `result` FROM `bets` WHERE `id` = {$id}"); 
    echo mysql_error(); 
    $wager_total = mysql_query("SELECT SUM(`wager_amount`) AS `wager_total` FROM `wagers` WHERE `id` = '{$id}'"); 
    $correct_wager_total = mysql_query("SELECT SUM(`wager_amount`) AS `correct_wager_total` FROM `wagers` WHERE `id` = '{$id}' AND `wager_option` = '{$result}'"); 
    echo mysql_error(); 
    $incorrect_wager_total = $wager_total - $correct_wager_total; 

    $sql = " SELECT * FROM `wagers` WHERE `id` = '{$id}' AND `wager_option` = '{$result}'"; 
    echo mysql_error(); 
    $data = mysql_query($sql); 

    $rows = array(); 
    while(($row = mysql_fetch_assoc($data)) !== false){ 
     $rows[] = array(
      'bet_id'   => $row['bet_id'], 
      'id'    => $row['id'], 
      'wager_amount' => $row['wager_amount'] 
     ); 
    } 

    foreach ($rows as $p_row){ 
     $payout = $p_row['wager_amount']/$incorrect_wager_total; 
     $payout = $p_row['wager_amount'] + $payout; 
     $p_row['payout'] = $payout; 
    } 

    return $p_row; 
} 
+0

'foreach($ rows as $ p_row){'の必要はありません。これは 'while'ループですべて実行できます。あなたのエラーと実行は 'SELECT * FROM'で間違った順序になっています。このコードでSQLインジェクションを開いていて、エラーがなければエラー関数を実行しないでください。 – chris85

答えて

1

問題は$p_rowは、アレイの行のコピーであるので、ループでそれを修正することは、元の配列に影響を及ぼさないことです。また

while ($row = mysql_fetch_assoc($data)) { 
    $new_row = array(
     'bet_id'   => $row['id'], 
     'id'    => $row['id'], 
     'wager_amount' => $row['wager_amount'], 
     'payout'   => $row['wager_amount']/$incorrect_wager_total + $row['wager_amount'] 
    );  

:あなたはwhileループで$rows配列を作成しているよう

foreach ($rows as &$p_row) 

それともこれを行うことができます。

あなたはforeach内の参照を使用して、この問題を解決することができます、あなたのreturn文が間違っている、それはreturn $rows;配列全体を返す必要があります。 return $p_rowは配列の最後の行を返します。

関連する問題