如何在嵌套的foreach循环中求和数据?

时间:2017-10-01 06:12:34

标签: php jquery codeigniter foreach

我想总结来自foreach循环内部的所有数据,并使用jquery将其与外部foreach中的值进行比较,但我不知道如何对来自内部foreach的所有数据点进行求和。

以下是观点:

<?php $no = 1;
foreach($data as $value)
{
  echo "<b>".$no."</b>";
  echo "<br>";
    foreach($datas as $values)
    {
     echo "<input type="number" id="valuea<?= $no ?>" value=".$values['myvalue']." onchange='sum(".$no.");check(".$no.")'>";
    }
  echo "<input type='text' id='totala"<?= $no ?>"' readonly>";
  echo "<input type='text' id='valueb"<?= $no ?>"' readonly value=".$value['myvalue'].">";

}

<button type='button' id='btn'>My Button</button>

这是sum函数:

function sum(id)
{
  var a = $('#valuea'+id).val();
  var total = sum all a values;
  ................

 $('#totala'+id).val(parseFloat(total));

在对所有2级foreach数据求和之后,验证的工作方式如下:

如果来自内部foreach&gt;的值=外部foreach上的值, 然后按钮显示其他按钮被隐藏

这里是验证jquery:

function check(id)
{
  var a= $('#totala'+id).val()
  var b =$('#valueb'+id).val();

这是我与逻辑混淆的地方......它应该是:

   if (a >= b)
   {
     $('#btn').show();
   }
   else
   {
     $('#btn').hide();
   }
}

1 个答案:

答案 0 :(得分:0)

我会将每个内部foreach输入放在div中并给它们一个类,所以总结一下,你可以通过使用each()函数循环它们的div中的那些来选择它们。另外,为每个输入data-no添加$no,这样您就可以轻松地从jquery访问该值。然后,您可以直接在jquery change()函数内部进行检查和求和。像这样......

<强> PHP

<?php $no = 1;

foreach($data as $value)
{
    echo "<b>".$no."</b>";
    echo "<br>";

    echo "<div class=\"innerloop\">";
    foreach ($datas as $values)
        echo "<input type=\"number\" class=\"innerinput\" id=\"valuea".$no."\" data-no=\"".$no."\" value=\"".$values["myvalue"]."\" >";
    echo "</div>";

    echo "<input type=\"text\" id=\"totala".$no."\" readonly>";
    echo "<input type=\"text\" id=\"valueb".$no."\" value=\"".$value['myvalue']."\" readonly>";

}

<button type='button' id='btn'>My Button</button>

...........

<强> JQUERY

$('input.innerinput').change(function() {

    var $innerloop = $(this).parent('div.innerloop');
    var no = $(this).data('no');

    var total = 0;
    $innerloop.children('input.innerinput').each(function() {
        total += parseFloat($(this).val());
    });

    $('input#totala'+no).val(total);

    if (total >= $('input#valueb'+no).val())
        $('#btn').show();
    else
        $('#btn').hide();

});

我希望它有所帮助