foreach循环遍历多维关联数组

时间:2014-04-02 15:01:25

标签: php arrays multidimensional-array foreach

我有一个数组($ this-> taxBand),它有3个键=>价值对。每个值都是另一个数组:

array(3) {
  ["basic"]=>
  array(3) {
    ["rate"]=>
    int(20)
    ["start"]=>
    int(0)
    ["end"]=>
    int(31865)
  }
  ["higher"]=>
  array(3) {
    ["rate"]=>
    int(40)
    ["start"]=>
    int(31866)
    ["end"]=>
    int(150000)
  }
  ["additional"]=>
  array(3) {
    ["rate"]=>
    int(45)
    ["start"]=>
    int(150001)
    ["end"]=>
    NULL
  }
}

我不仅需要遍历按键"基本","更高"和"额外"但其中的数组也是如此。

我将比较"开始"和"结束"使用另一个变量的值并根据" rate"。

应用计算

我尝试使用我在这里找到的许多示例和官方文档,以几种不同的方式尝试嵌套foreach,并且只能让它返回" basic"数组元素。

示例:

foreach ($this->taxBand as $key => $band) {

            foreach ($band as $subKey => $value) {

                    // Do my stuff

            }

        }

如果我返回$ band,我会得到:

array(5) {
  ["rate"]=>
  int(20)
  ["start"]=>
  int(0)
  ["end"]=>
  int(31865)
}

并且$ key返回:

string(5) "basic"

我清除了一些非常基本的东西,并没有完全理解如何正确循环这些数组并获得我需要的所有数据。

非常感谢任何帮助。 :)

编辑:试图展示我计划如何使用此循环的示例。由于其他功能/变量,这很困难:

foreach ($this->taxBand as $key => $band) {

                    if ($band["end"] !== null || $band["end"] > 0) {
                        $band["amount"] = $this->get_lower_figure($this->totalTaxableAmount, $band["end"]) - $bandDeductions;
                    } else {
                        $band["amount"] = $this->totalTaxableAmount - $bandDeductions;
                    }

                $band["percentage_amount"] = ($band["amount"] / 100) * $band["rate"];
                $totalDeduction += $band["percentage_amount"];
                $bandDeductions += $band["amount"];

                return $totalDeduction;

        }

假设$ this-> totalTaxableAmount是40000" percentage_amount"应该为基本波段返回6373的浮点数。但它也应该从更高的频段返回3254。

get_lower_figure()只需要两个参数并检查哪个小于另一个。

1 个答案:

答案 0 :(得分:4)

您似乎正确处理一切......但如果您要直接使用start / end / rate值,则不需要第二个{ {1}}循环。这样的事情可以让你前进:

foreach

我怀疑这是你打算做的工作,但关键是你可以直接访问内部关联数组$values = array(); foreach($this->taxBand as $key => $band) { $calculation = ($band['end'] - $band['start']) / $band['rate']; $values[$key] = $calculation; } return $values;

如果你出于某种原因使用子循环,你可以这样做:

$band