【问题标题】:Make array loop dynamic in PHP在 PHP 中使数组循环动态化
【发布时间】:2017-06-02 09:01:12
【问题描述】:

我有 2 个数组,$rekeningnum_array$weights。两个数组都包含 10 位数字。

$rekeningnum_array includes: {3,7,1,6,2,9,3,4,5,2}
$weights always includes: {1,2,3,4,5,6,7,8,9,10}

每个$rekeningnum_array[i] 对象都转到*times 一个$weights[i] 数组对象。所以是[ i ] x [ i ]

计算完所有 10 个总和后,将它们存储在 $answers[i] 数组中并相乘,然后将最终答案除以 11。我附上了一张图片以便于理解。

这是我的代码:

$rekeningnum_array = array(3, 7, 1, 6, 2, 9, 3, 4, 5, 2);
$weights = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);

for($i=0; $i <= 9; $i++) {
    $ant[$i] = $rekeningnum_array[$i] * $weights[$i];
    echo $rekeningnum_array[$i] . " x " . $weigts[$i] . " = " . $answer[$i] . "</br>"; 

};



// Multiply all answers and devide them by 11.

$sum = $answer[0] + $answer[1] + $answer[2] + $answer[3] + $answer[4] + $answer[5] + $answer[6] + $answer[7] + $answer[8] + $answer[9];
$antwoord = $sum / 11;

我的问题是,如何让我的代码更具动态性?

($gewichten 代表 $weights)

【问题讨论】:

  • $answer 是在哪里神奇地创造出来的???
  • @RiggsFolly 好像和$ant 一样。对于 OP - 你在 weigts 中有错字
  • 它是在for循环中创建的,代码运行良好!
  • 如果你修改这一行,将计算放在一个名为 $answer 的数组中,它可能会神奇地开始工作 $answer[$i] = $rekeningnum_array[$i] * $weights[$i];

标签: php arrays loops for-loop


【解决方案1】:

是的,您也可以动态创建循环。使用此代码

<?php
$rekeningnum_array = array(3, 7, 1, 6, 2, 9, 3, 4, 5, 2);
$weights = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
$sum=0;
foreach($rekeningnum_array as $key => $value) {
    $ans[$key] = $value * $weights[$key];
     $sum+=$ans[$key];

};

// Multiply all answers and devide them by 11.
echo $antwoord = $sum / 11;

?>

【讨论】:

    【解决方案2】:

    您使用了ant[$i](第 4 行)作为结果,$weights[$i](第 5 行)的拼写不正确。

    $rekeningnum_array = array(3, 7, 1, 6, 2, 9, 3, 4, 5, 2);
        $weights = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
    
    for($i=0; $i <= 9; $i++) {
        $answer[$i] = $rekeningnum_array[$i] * $weights[$i];
        echo $rekeningnum_array[$i] . " x " . $weights[$i] . " = " . $answer[$i] . "</br>"; 
    
    };
    
    
    
    // Multiply all answers and devide them by 11.
    
    $sum = $answer[0] + $answer[1] + $answer[2] + $answer[3] + $answer[4] + $answer[5] + $answer[6] + $answer[7] + $answer[8] + $answer[9];
    $antwoord = $sum / 11;
    

    【讨论】:

    • 有没有办法摆脱 $weights 因为它们总是包含相同的数字(1 到 10)?并使其成为从 1 计数到 10 的循环本身?
    【解决方案3】:

    解决了您的问题请通过此代码更新您的代码

    <?php
    
    $rekeningnum_array = array(3, 7, 1, 6, 2, 9, 3, 4, 5, 2);
    $weights = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
    $ant =0;
    for($i=0; $i <= 9; $i++) {
        $ant += $rekeningnum_array[$i] * $weights[$i];
        $now_result = $rekeningnum_array[$i] * $weights[$i];
        echo $rekeningnum_array[$i] . " x " . $weights[$i] . " = " . $now_result . "</br>"; 
    };
    echo $antwoord = $ant / 11;
    
    ?> 
    

    这里我在循环之前定义了一个空白变量 $ant 在循环内部我添加(+=),它在循环的每次迭代中添加并存储每个值。 变量 $now_result 我仅用于打印循环内的每个迭代值 在循环之外,我根据需要将 $ant 除以 11 就是这么简单

    【讨论】:

    • 您可能想描述一下您所做的更改,因此可能对其他人有用
    • 确定在这里我在循环之前定义了一个空白变量 $ant 我在循环中添加(+=),它在每次循环迭代中添加并存储每个值。变量 $now_result 我只用来打印循环内的每个迭代值 在循环外我将 $ant 划分为 11,因为你想要简单和简短
    • 不是我。把它放在你的答案中
    【解决方案4】:

    用我的代码改变你的代码

    <?php
        $rekeningnum_array = array(3, 7, 1, 6, 2, 9, 3, 4, 5, 2);
        $weights = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
        $answer = array(); //New Blank Array is initialized
        for($i=0; $i <= 9; $i++) {
           $answer[$i] = $rekeningnum_array[$i] * $weights[$i];//Here ant variable is changed to answer
           echo $rekeningnum_array[$i] . " x " . $weights[$i] . " = " . $answer[$i] . "</br>"; //Here $weigts spelling mistake
    
        };
    
    
    
     // Multiply all answers and devide them by 11.
    
     $sum = $answer[0] + $answer[1] + $answer[2] + $answer[3] + $answer[4] + 
     $answer[5] + $answer[6] + $answer[7] + $answer[8] + $answer[9];
     $antwoord = $sum / 11;
    

    【讨论】:

      【解决方案5】:

      试试这个

      $rekeningnum_array = array(3, 7, 1, 6, 2, 9, 3, 4, 5, 2);
      $weight = 1;
      $count = count($rekeningnum_array)-1;
      $answer = array();
      for($i=0; $i <= $count; $i++) {
          $weight = $weight > 10?1:$weight;
          $answer[$i] = $rekeningnum_array[$i] * $weight ;
          echo $rekeningnum_array[$i] . " x " . $weight . " = " . $answer[$i] . "</br>"; 
       $weight++;
      }    
      $sum = array_sum($answer);
      $antwoord = $sum / 11;
      

      【讨论】:

      • 有没有办法摆脱 $weights 因为它们总是包含相同的数字(1 到 10)?并使其成为从 1 计数到 10 的循环本身?
      • @jasj 当然可以,但是如果处理$i == 11 会是$weights[11] == 1$weights[11] == 10 吗??
      【解决方案6】:

      使用类似的东西

      $rekeningnum_array = array(3, 7, 1, 6, 2, 9, 3, 4, 5, 2);
      $weights = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
      $sum=0;
      for($i=0; $i <= 9; $i++) {
          $ans[$i] = $rekeningnum_array[$i] * $weights[$i];
           $sum+=$ans[$i];
      
      };
      
      // Multiply all answers and devide them by 11.
      $antwoord = $sum / 11;
      

      【讨论】:

      • 有没有办法摆脱 $weights 因为它们总是包含相同的数字(1 到 10)?并使其成为从 1 计数到 10 的循环本身?
      猜你喜欢
      • 2014-11-26
      • 1970-01-01
      • 1970-01-01
      • 2020-09-14
      • 1970-01-01
      • 2013-11-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多