Выполнение вычислений на многомерных массивах в PHP - PullRequest
0 голосов
/ 14 июня 2019

У меня есть два многомерных массива, как показано ниже, с одинаковой структурой, но разными значениями.

$first = array (
  'something1' => 
  array (
    '2019-06-14' => 0,
    '2019-06-13' => 0,
    '2019-06-12' => 0,
    '2019-06-11' => 1,
    '2019-06-10' => 1
  ),
  'something2' => 
  array (
    '2019-06-14' => 0,
    '2019-06-13' => 0,
    '2019-06-12' => 0,
    '2019-06-11' => 1,
    '2019-06-10' => 0
  ),
)

$second = array (
  'something1' => 
  array (
    '2019-06-14' => 8,
    '2019-06-13' => 4,
    '2019-06-12' => 7,
    '2019-06-11' => 2,
    '2019-06-10' => 9
  ),
  'something2' => 
  array (
    '2019-06-14' => 3,
    '2019-06-13' => 7,
    '2019-06-12' => 3,
    '2019-06-11' => 4,
    '2019-06-10' => 8
  ),
)

Мне нужно выполнить простое вычисление для обоих, где результат будет таким (значение из массива $ first / значение из массива $ second для каждой даты):

$result = array (
  'someting1' => 
  array (
    '2019-06-14' => 0/8,
    '2019-06-13' => 0/4,
    '2019-06-12' => 0/7,
    '2019-06-11' => 1/2,
    '2019-06-10' => 1/9
  ),
  'something2' => 
  array (
    '2019-06-14' => 0/3,
    '2019-06-13' => 0/7,
    '2019-06-12' => 0/3,
    '2019-06-11' => 1/4,
    '2019-06-10' => 0/8
  ),
)

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

foreach($array1 as $sth => $v) {
    foreach($v as $date => $number) {
        echo $sth. ' data: ' . $date . ' number: ' . $number . '</br>';
    }
}

Как я могу выполнить такой расчет?

Ответы [ 2 ]

1 голос
/ 14 июня 2019

Простой цикл foreach должен сделать это:

foreach($first as $k => $arr) 
    foreach($arr as $date => $num)
        $result[$k][$date] = $num . " / " . $second[$k][$date];
1 голос
/ 14 июня 2019

Вам не нужны дополнительные циклы для второго массива; у вас есть ключи $sth и $date, чтобы вы могли получить доступ к значениям напрямую:

foreach($array1 as $sth => $v) {
    foreach($v as $date => $number) {
        echo $sth. ' data: ' . $date . ' number: ' . $number . '</br>';
        echo 'second number: ' . $second[$sth][$date] . '</br>';
    }
}

Обратите внимание, что вам может понадобиться добавить проверки, чтобы увидеть, существуют ли ключи во втором массиве.

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