【问题标题】:Loop through For Loop certain number of times通过 For Loop 循环一定次数
【发布时间】:2021-10-17 10:08:12
【问题描述】:

好的,我知道这个问题有点含糊,但我开始了。我有一个带有 4 个输入的动态表单。表单上的这些动态字段可以生成多次。

我打算实现的是,输入字段重复金额为 100 应该插入 4 次,与金额 200 相同,与金额 300 相同,因此我总共应该有 12 笔不同金额的交易。我已经设置了将动态字段插入数据库的代码,不包括重复输入字段。我似乎无法确定如何进行上述解释。请帮忙

        $bulkRecipientTransfer = $Request->bulkRecipientTransfer; //array
        $bulkTransferType      = $Request->bulkTransferType; //array
        $bulkAmountTransfer    = $Request->bulkAmountTransfer;//array
        $bulkCountTransfer     = $Request->transferCount; //array 

for( $i =0; $i < count($bulkRecipientTransfer);) {
            
            $commandId = MpesaB2B::query()->where('id',$bulkTransferType[$i])->pluck('commandID')->first();
             
            $this_contact = array(
    
                $bulkRecipientTransfer[$i],
                $bulkTransferType[$i],
                $bulkAmountTransfer[$i],
                $bulkCountTransfer[$i]

                );

            $_amount = $bulkAmountTransfer[$i];
            $_bulkRecipientTransfer = $bulkRecipientTransfer[$i];
            
            $CountTransfer = $bulkCountTransfer;

                     $insertData = [
    
                            'AccountReference'  =>$narration,
                            'TransactionAmount' =>(int)str_replace(',', '', $_amount),
                            'Status'            =>0,
                            'credit_party'      =>$_bulkRecipientTransfer,
                            'debit_party'       =>$sender,
                            'CommandID'         =>$commandId,
                            'SystemType'        =>'externalbulk'
                            ];
                        
    
                        B2BTransfer::insert($insertData);


            }

【问题讨论】:

  • 你的代码工作了吗?
  • 是的,代码可以在没有标记为重复的输入字段的情况下工作。
  • 对不起,我没明白。你能解释一下吗
  • 听起来你想实现 两个 循环,一个在另一个里面。不过,不知道为什么这是个问题。
  • @arkascha 感谢您的回复。这就是我想要的问题是我如何在一个事务的重复字段上完成一个值然后执行另一个。

标签: php laravel loops for-loop


【解决方案1】:

对于第二个循环,这可能有效。我不确定我是否正确地回答了你的问题。这将允许您将这些条目中的每一个添加到数据库中四次。

for( $i =0; $i < count($bulkRecipientTransfer);) {
            
            $commandId = MpesaB2B::query()->where('id',$bulkTransferType[$i])->pluck('commandID')->first();
             
            $this_contact = array(
    
                $bulkRecipientTransfer[$i],
                $bulkTransferType[$i],
                $bulkAmountTransfer[$i],
                $bulkCountTransfer[$i]

                );

            $_amount = $bulkAmountTransfer[$i];
            $_bulkRecipientTransfer = $bulkRecipientTransfer[$i];
            
            $CountTransfer = $bulkCountTransfer;
                     $insertData = [
    
                            'AccountReference'  =>$narration,
                            'TransactionAmount' =>(int)str_replace(',', '', $_amount),
                            'Status'            =>0,
                            'credit_party'      =>$_bulkRecipientTransfer,
                            'debit_party'       =>$sender,
                            'CommandID'         =>$commandId,
                            'SystemType'        =>'externalbulk'
                            ];
                        
    
            for($j = 0; $j < $CountTransfer; $j++) {
                        B2BTransfer::insert($insertData);
            }


            }
    ```

【讨论】:

    【解决方案2】:

    好的,谢谢大家在这方面的帮助。好吧,由于客户的压力和时间表问题,我不得不通过以下方式找到解决办法;

            for($i=0; $i< count($bulkRecipientTransfer); $i++){
    
                $stagingTransfer = new MpesaStaging;
                $stagingTransfer->credit_party = $Request->bulkRecipientTransfer[$i];
                $stagingTransfer->debit_party = $Request->sender;
                $stagingTransfer->AccountReference = $Request->bulkNarration[$i];
                $stagingTransfer->TransactionAmount = (int)str_replace(',', '', $Request->bulkAmountTransfer[$i]);
                $stagingTransfer->Status = 1;
                $stagingTransfer->SystemType = 'externalbulk';
                $stagingTransfer->CommandID = $Request->bulkTransferType[$i];
                $stagingTransfer->repeatCount = $Request->transferCount[$i];
                $stagingTransfer->save();
    
    
            }
    
            //Fetch the stored transactions here
    
            $fetchStaging = MpesaStaging::query()->where('Status',1)->get();
    
    
            foreach($fetchStaging as $key=>$queue){
    
                 $transactionCountStart      = 1;
                 $TransactionAccountRefDate  = date('dmy');
    
                for($i=0; $i < $queue->repeatCount; $i++){
    
                   $commandId = MpesaB2B::query()->where('id',$queue->CommandID)->pluck('commandID')->first();
    
                    $transferSchedule = new B2BTransfer;
                    $transferSchedule->AccountReference  = $queue->AccountReference.$transactionCountStart++.$TransactionAccountRefDate;
                    $transferSchedule->TransactionAmount = $queue->TransactionAmount;
                    $transferSchedule->Status       = 0;
                    $transferSchedule->credit_party = $queue->credit_party;
                    $transferSchedule->debit_party  = $queue->debit_party;
                    $transferSchedule->CommandID    = $commandId;
                    $transferSchedule->SystemType   = $queue->SystemType;
                    $transferSchedule->save(); 
    
                }
    
                $updateScheduledPayments = MpesaStaging::query()->where('id',$queue->id)->delete();
            }
    
    1. 捕获生成的动态行数。然后将它们存储在临时表上。 提取为每个事务捕获的RepeatCount Amount,并使用for循环处理RepeatCount个待排队事务。然后根据队列id删除已处理的暂存事务。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-10-27
      • 1970-01-01
      • 2022-01-17
      • 1970-01-01
      • 2016-01-09
      • 1970-01-01
      相关资源
      最近更新 更多