Поиск по массиву и добавление пропущенных месяцев и лет в исходный массив - PullRequest
1 голос
/ 03 марта 2020

У меня есть массив с финансовым годом и месяцем (июнь-июль), преобразованный в календарный год и месяц. Каждая строка содержит финансовый год, финансовый месяц, календарный год, календарный месяц и деньги, потраченные в этом месяце. Этот массив возвращается SQL запросом. Когда он возвращается, он не включает месяцы, когда потраченные деньги были равны нулю.

Я хочу найти календарные месяцы, начиная с первого календарного года (в данном случае 2017), где потраченные деньги были равны нулю, и добавить их в тот же массив с соответствующим финансовым годом, финансовым месяцем, календарным годом, календарным месяцем , Таким образом, этот массив содержит все месяцы, когда потраченные деньги были равны нулю или больше нуля.

Массив, возвращаемый из базы данных, создается здесь как $ row. Я пытался создать логику c для поиска месяцев, но безуспешно. В моем случае циклы, вместо вывода менее 36 раз, выводят многочисленные значения. Любая помощь будет очень полезной.

<code>    $row;
$row[0]=array("fin_year"=>2018,"fin_month"=>5,"spent"=>125.00,"cal_year"=>2017,"cal_month"=>11 );
$row[1] = array("fin_year" => 2018, "fin_month" => 7, "spent" => 200.00, "cal_year" => 2018, "cal_month" => 1);
$row[2] = array("fin_year" => 2018, "fin_month" => 8, "spent" => 300.00, "cal_year" => 2018, "cal_month" => 2);
$row[3] = array("fin_year" => 2018, "fin_month" => 10, "spent" => 200.00, "cal_year" => 2018, "cal_month" => 4);
$row[4] = array("fin_year" => 2018, "fin_month" => 12, "spent" => 200.00, "cal_year" => 2018, "cal_month" => 6);
$row[5] = array("fin_year" => 2019, "fin_month" => 2, "spent" => 725.00, "cal_year" => 2018, "cal_month" => 8);
$row[6] = array("fin_year" => 2019, "fin_month" => 3, "spent" => 210.00, "cal_year" => 2018, "cal_month" => 9);
$row[7] = array("fin_year" => 2019, "fin_month" => 4, "spent" => 330.00, "cal_year" => 2018, "cal_month" => 10);
$row[8] = array("fin_year" => 2019, "fin_month" => 8, "spent" => 230.00, "cal_year" => 2019, "cal_month" => 4);
$row[9] = array("fin_year" => 2019, "fin_month" => 10, "spent" => 333.00, "cal_year" => 2019, "cal_month" => 4);

echo "<pre>";print_r($row);
echo "
"; $ start_year = 2017; $ last_year = 2019; for ($ l = $ start_year; $ l ++; $ l <= $ last_year) {// проверить первый год 2017 foreach ($ row как $ value) {// l oop через все строки row ['0'] if ($ l = $ value ['cal_year']) {// true для ($ k = 1; $ k <= 12; $ k ++) {// k = 12 месяцев в году, если ($ k! = $ Value ['cal_month']) {echo 'kkkkk'. $ L. $ K; echo '<br>';} }}}}

1 Ответ

0 голосов
/ 03 марта 2020

Этот сценарий проходит каждый год между $start_year и $last_year, затем через каждые month между 1 и 12. Если в вашем массиве нет записи с этими обоими параметрами, она добавит ее в конец вашего массива. Наконец, он сортирует ваш массив по fin_year и fin_month.

$row = array(); // YOUR ARRAY FROM DATABASE

$start_year = 2017;
$last_year = 2019;

// loops through every year between $start_year and $last_year
for( $current_year = $start_year; $current_year <= $last_year; $current_year++ ) {
  // loops through every month between 1 and 12
  for( $current_month = 1; $current_month <= 12; $current_month++ ) {
    // loops through every item of your array
    $found = false;
    foreach( $row as $value ) {
      // if there is an entry with that year and month, it breaks the foreach
      if( $value['fin_year'] == $current_year && $value['fin_month'] == $current_month )  {
        $found = true;
        break;
      }
    }

    if( !$found )  {
      // if there was no entry found with that year and month, it will add a new one at the end
      $row[] = array("fin_year" => $current_year, "fin_month" => $current_month, "spent" => 0, "cal_year" => $current_year, "cal_month" => $current_month );
      $found = false;
    }
  }
}

// function to sort the array by fin_year and if equal by fin_month
function special_sort($a, $b) {
  $retval = $a['fin_year'] <=> $b['fin_year'];
  if ($retval == 0) {
    $retval = $a['fin_month'] <=> $b['fin_month'];
  }
  return $retval;
}

// call the sort function
usort($row, 'special_sort');

// displays your new array
echo '<pre>';
print_r( $row );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...