цикл foreach в значении массива только в последнем значении - PullRequest
0 голосов
/ 03 мая 2018

У меня есть цикл foreach в месяце и данные о количестве значений за месяц в массиве print, но в массиве печатается только последнее значение

foreach($rawData as $Data)
{
    $monthsss = $Data['month_no'];

    if($monthsss=='1')
    {
        $arrayF['jan'] = $Data['month_count'];
    }
    else
    {
        $arrayF['jan'] = '0';
    }

    if($monthsss=='2')
    {
        $arrayF['feb'] = $Data['month_count'];
    }
    else
    {
        $arrayF['feb'] = '0';
    }
 }

Ответы [ 2 ]

0 голосов
/ 03 мая 2018

Когда кто-то комментирует и спрашивает Пожалуйста, покажите ввод и ожидаемый результат. это не сделано, чтобы дать вам больше работы, но есть много способов достичь того, что вы хотите, но многие ответы могут быть неправильными или требовать много больше кода (как с принятым ответом).

Предположим, что это ваши данные:

$rawData = [
    ['month_no' => 1, 'month_count' => 1],
    ['month_no' => 2, 'month_count' => 1],
    ['month_no' => 3, 'month_count' => 1],
    ['month_no' => 4, 'month_count' => 1],
    ['month_no' => 1, 'month_count' => 2],
    ['month_no' => 6, 'month_count' => 2],
    ['month_no' => 7, 'month_count' => 6],
    ['month_no' => 12, 'month_count' => 4],
];

Вы хотите только суммированные значения?

<?php

$array = [];
foreach ($rawData as $data) {
    $m = strtolower(DateTime::createFromFormat('!m', $data['month_no'])->format('M'));
    $array[$m] = !isset($array[$m]) ? $data['month_count'] : $array[$m]+$data['month_count'];
}

print_r($array);

https://3v4l.org/vXgCL

Array
(
    [jan] => 3
    [feb] => 1
    [mar] => 1
    [apr] => 1
    [jun] => 2
    [jul] => 6
    [dec] => 4
)

Или вы хотите массив всех месяцев с суммированными значениями:

<?php

$array = [];
foreach (range(1, 12) as $month) {
    $m = strtolower(DateTime::createFromFormat('!m', $month)->format('M'));

    $monthSet = array_filter($rawData, function ($v) use ($month) {
        return $v['month_no'] === $month;
    });

    $array[$m] = 0;
    foreach ($monthSet as $data) {
        $array[$m] += $data['month_count'];
    }
}

print_r($array);

https://3v4l.org/vqnnv

Array
(
    [jan] => 3
    [feb] => 1
    [mar] => 1
    [apr] => 1
    [may] => 0
    [jun] => 2
    [jul] => 6
    [aug] => 0
    [sep] => 0
    [oct] => 0
    [nov] => 0
    [dec] => 4
)

Или, возможно, даже не заботятся о строках месяца, как предполагает ваш комментарий.

<?php
$array = [];
foreach ($rawData as $data) {
    $m = $data['month_no'];
    $array[$m] = !isset($array[$m]) ? $data['month_count'] : $array[$m]+$data['month_count'];
}

print_r($array);

https://3v4l.org/7gKRo

Array
(
    [1] => 3
    [2] => 1
    [3] => 1
    [4] => 1
    [6] => 2
    [7] => 6
    [12] => 4
)

Вот почему мы спрашиваем ..

0 голосов
/ 03 мая 2018

Пожалуйста, измените ваш код следующим образом

foreach($rawData as $Data)
{
    $monthsss = $Data['month_no'];

    if($monthsss=='1')
    {
        $arrayF['jan'] = is_null($Data['month_count'])? 0 : $Data['month_count'];
    }


    if($monthsss=='2')
    {
        $arrayF['feb'] = is_null($Data['month_count'])? 0 : $Data['month_count'];
    }

 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...