Итерация по многомерному Arry для определенных значений

Я пытаюсь перебирать свой многомерный массив, чтобы получить индекс выбранного значения для каждого вложенного массива. Например, когда я запускаю свой цикл, я сравниваю $income, чтобы увидеть, находится ли он между «диапазонами» каждого массива. Когда «диапазон» найден, я хочу взять этот диапазон $x и использовать его для создания вычислений на основе «MinTax» и «Rates» для каждого вложенного массива. До сих пор я могу перебирать массив $TAX_RATES, но не уверен, как сохранить индекс каждого вложенного массива. Не знаю, что делать до этого момента. Вот код.

<?php

$income = filter_input(INPUT_POST, 'income'); 
define('TAX_RATES',
array(
 'Single' => array(
  'Rates' => array(10,15,25,28,33,35,39.6),
  'Ranges' =>array(0,9275,37650,91150,190150,413350,415050),
      'MinTax'=>array(0,927.50,5183.75,18558.75,46278.75,119934.75,120529.75),
  ),
  'Married_Jointly' =>array(
    'Rates' => array(10,15,25,28,33,35,39.6),
    'Ranges' =>array(0,18550,75300,151900,231450,413350,466950),
    'MinTax' =>array(0,1855.00,10367.50,29517.50,51791.50,111818.50,130578.50),
  ),
  'Married_Seperately' =>array(
    'Rates' => array(10,15,25,28,33,35,39.6),
    'Ranges' =>array(0,9275,37650,75950,115725,206675,233475),
    'MinTax'=>array(0,927.50,5183.75,14758.75,25895.75,5599.25,65289.25),
  ),
  'Head_Household' =>array(
    'Rates' => array(10,15,25,28,33,35,39.6),
    'Ranges' =>array(0,13250,50400,130150,210800,413350,441000),
    'MinTax' => array(0,1325.00,6897.50,26835.00,49417,116258.50,125936)
  )
 )
);

  function incomeTax($income){
    foreach(TAX_RATES as $lvl => $lvl_data){
        $x=0; 
        while ($x <=7){
          if($income>=TAX_RATES[$lvl]['Ranges'][$x] 
          && $income<=TAX_RATES[$lvl]['Ranges'][$x+1]){              
          return $income=TAX_RATES[$lvl]['MinTax'][$x]
                 +((TAX_RATES[$lvl]['Rates'][$x]*.01)
                 *($income-(TAX_RATES[$lvl]['Ranges'][$x])));
            } 
        $x++; 
        }   
  }    
  };

$results = incomeTax($income);

?>  

1 ответ

  1. Я смог это выяснить благодаря этому форуму. https://www.codecademy.com/en/forum_questions/556d9d0ad3292f03fb000558 . Вот мой новый код.

    function incomeTax($income){
        foreach(TAX_RATES as $lvl => $lvl_data){         
            for($i=0; $i<count(TAX_RATES[$lvl]['Ranges']); $i++){
              for($l=0; $l<count(TAX_RATES[$lvl]['Ranges'][$i]); $l++){
    
              if($income>=TAX_RATES[$lvl]['Ranges'][$i] 
              && $income<=TAX_RATES[$lvl]['Ranges'][$i+1])
                {
                echo $i; 
                }
              }
            }
    
       } 
    };