0

ここにデータがあります:

Array
(
[0] => Array
    (
        [SiteID] => 147
        [Amount] => 500.00
        [TransactionType] => D
    )

[1] => Array
    (
        [SiteID] => 147
        [Amount] => 500.00
        [TransactionType] => D
    )

[2] => Array
    (
        [SiteID] => 145
        [Amount] => 500.00
        [TransactionType] => R
    )
)

リロード、償還、デポジットの計算が完了し、機能していますが、siteID にデポジット [D] またはリロード [R] または償還 [W] のトランザクションがない場合は、0 に等しくなるはずです。私のコードここにある:

   public function computeGHComponents()
    {
      error_reporting (E_ALL^ E_NOTICE);          

      foreach ($this->transaction as $t){

          $amount = (float) $t['Amount'];

            if (isset($this->totals[ $t['SiteID'] ][ $t['TransactionType'] ])){
                $this->totals[ $t['SiteID'] ][ $t['TransactionType'] ] += (float) $amount;
            } else {
                 $this->totals[ $t['SiteID'] ][ $t['TransactionType'] ] = (float) $amount;
            }
        }

     foreach($this->totals as $key => $value)


        {
          $this->result[$key] = array("Deposit"=>$value['D'], "Redemption"=>$value['W'], "Reload"=>$value['R']);

       }
     print_r($this->result); 

    } 

結果は次のように表示されます。

 Array
 (
[147] => Array
    (
        [Deposit] => 1000
        [Redemption] => 0
        [Reload] => 0
    )

[145] => Array
    (
        [Deposit] => 0
        [Redemption] => 500.00
        [Reload] => 0
    )

 )

事前に感謝し、適切な方法で私を案内してください。

4

2 に答える 2

0

ループを 1 つだけ実行することに集中します。

foreach ($this->transaction as $key => $t){

   $amount = $t['Amount'];

   // set up the array with each postion equal to zero
   $tranTypes = array("Deposit"= 0, "Redemption"=> 0 , "Reload"= 0);

   $transaction = $t['TransactionType'];

   switch($transaction){
     case "D":
        $tranTypes['Deposit'] = $amount;
     break;

     case "R":
         $tranTypes['Redemption'] = $amount;
     break;

     case "W":
         $tranTypes['Reload'] = $amount;
     break;

     }

    $this->result[$key] = $transaction;
}

またはこれ

 foreach($this->totals as $key => $value)


    {

     $this->result[$key]['Deposit']    = isset($value['D']) ? $value['D'] : 0;
     $this->result[$key]['Redemption'] = isset($value['W']) ? $value['W'] : 0; 
     $this->result[$key]['Reload']     = isset($value['R']) ? $value['R'] : 0;
    }
于 2012-08-15T03:15:11.250 に答える
0

説明があいまいで、質問に不足している情報があります。したがって、これはブラインド ショットのようなものです。

最後の foreach 内の代入では、デフォルト値として 0 を追加できます。

$this->result[$key] = array(
  "Deposit"    => array_key_exists('D',$value) ? $value['D'] : 0,            
  "Redemption" => array_key_exists('W',$value) ? $value['W'] : 0,           
  "Reload"     => array_key_exists('R',$value) ? $value['R'] : 0             
);
于 2012-08-15T03:03:29.007 に答える