Добавить значение из одного ассоциативного массива в другой на основе условия

Пока у меня есть три массива, которые возвращают значения из базы данных, как это (после большого форматирования)

[0]=>array(
           [0]=>'Apr', [1]=> 1), 
[1]=>array(
           [0]=>'May', [1]=>2), 
[2]=>array(
           [0]=>'Jun', [1]=>23)

Второй массив с похожими значениями:

[0]=>array(
           [0]=>'Mar', [1]=>22),     
[1]=>array(
           [0]=>'Apr', [1]=> 1), 
[2]=>array(
           [0]=>'May', [1]=>2), 
[3]=>array(
           [0]=>'Jun', [1]=>25)

И третье:

[0]=>array(
           [0]=>'Jan', [1]=>50),     
[1]=>array(
           [0]=>'Feb', [1]=> 20), 
[2]=>array(
           [0]=>'Mar', [1]=>16), 
[3]=>array(
           [0]=>'Jun', [1]=>5)

И вот как я пытаюсь сделать их такими:

[0]=>array(
           [0]=>'Month', [1]=>'Calc1', [2]=>'Calc2', [3]=>'Calc3'),     
[1]=>array(
           [0]=>'Jan', [1]=>0, [2]=>0, [3]=>50), 
[2]=>array(
           [0]=>'Feb', [1]=>0, [2]=>0, [3]=>20), 
[3]=>array(
           [0]=>'Mar', [1]=>0, [2]=>22, [3]=>16),
[4]=>array(
           [0]=>'Apr', [1]=>1, [2]=>1, [3]=>0),
[5]=>array(
           [0]=>'May', [1]=>2, [2]=>2, [3]=>0),
[6]=>array(
           [0]=>'Jun', [1]=>23, [2]=>25, [3]=>5)

Обратите внимание, как заполняется «0» в местах, где он не содержит значения. Честно говоря, это самая сложная проблема с массивом, с которой я когда-либо сталкивался, и причина в сложности прохождения массива. Мне особенно нужно, чтобы массив был этой структурой, потому что мне нужно отправить его в диаграмму области визуализации Google.

Пожалуйста, напишите, если вы нашли какие-либо предложения по этой проблеме.

Огромное спасибо заранее :)

@DevZer0: это результат, который я получаю (с моими реальными данными). Обратите внимание, как повторяются месяцы:

   array(
        [0] =>
            array(
                  [0] =>'Month'
                  [1] =>'Calc1'
                  [2] =>'Calc2'
                  [3] =>'Calc3'
                 )
        [1] =>
            array(

                  [0] =>'Apr'
                  [1] =>1
                  [2] =>0
                  [3] =>0
                  )
        [2] =>
            array(

                  [0] =>'Jun'
                  [1] =>9
                  [2] =>0
                  [3] =>0
                  )
        [3] =>
            array(

                  [0] =>'Apr'
                  [1] =>0
                  [2] =>1
                  [3] =>0
                  )
        [4] =>
                  array(

                  [0] =>'May'
                  [1] =>0
                  [2] =>2
                  [3] =>0
                  )
        [5] =>
                  array(

                  [0] =>'Jun'
                  [1] =>0
                  [2] =>23
                  [3] =>0
                  )
        [6] =>
                  array(

                  [0] =>'Apr'
                  [1] =>0
                  [2] =>0
                  [3] =>1
                  )
        [7] =>
                  array(

                  [0] =>'May'
                  [1] =>0
                  [2] =>0
                  [3] =>3
                  )
        [8] =>
                  array(

                  [0] =>'Jun'
                  [1] =>0
                  [2] =>0
                  [3] =>27
                  )
)

Я хотел бы, чтобы они были объединены в этом формате:

    array(
        [0] =>
            array(
                  [0] =>'Month'
                  [1] =>'Calc1'
                  [2] =>'Calc2'
                  [3] =>'Calc3'
                 )
        [1] =>
            array(

                  [0] =>'Apr'
                  [1] =>1
                  [2] =>1
                  [3] =>1
                  )
        [2] =>
            array(

                  [0] =>'May'
                  [1] =>0
                  [2] =>2
                  [3] =>3
                  )

        [3] =>
            array(

                  [0] =>'Jun'
                  [1] =>9
                  [2] =>23
                  [3] =>27
                  )

)

Есть ли способ сделать это? Еще раз большое спасибо :)


person AyB    schedule 23.06.2013    source источник
comment
@LucM Я знаю, что заставлять других людей делать твою домашнюю работу неэтично. Я бы опубликовал то, что пробовал, если бы это имело смысл хотя бы для меня. Но мне было слишком трудно понять, как пройти через этот массив, потому что он не просто ассоциативен, он индексирован и внутри ассоциативен. Я даже пытался сделать один (вручную) похожий на него, и это само по себе не сработало O.O.   -  person AyB    schedule 23.06.2013


Ответы (1)


Это не сложная проблема, если я правильно понимаю, у вас есть массивы, в которых есть месяц и целое число. давайте предположим, что у вас есть 3 массива с именами $array1,$array2,$array3

 $arrays = array($array1, $array2, $array3);
 $final = array();
 $index = 1;
 foreach ($arrays as $array) {
     foreach ($array as $ar) {
          if (!isset($final[$ar[0]])) {
              $final[$ar[0]] = array($ar[0], $index => $ar[1]);
          } else {
              $final[$ar[0]][$index] = $ar[1];
          }
     }
     $index++;
 }

 $final = array_values($final);

 for($x=0; $x < count($final); $x++) {
      for($i=1; $i < 4; $i++) {
          if (!isset($final[$x][$i])) $final[$x][$i] = "0";
      }
 }

 $header = array("Month", "Calc1", "Calc2", "Calc3");
 array_unshift($final, $header);

 var_dump($final); //will have your resulting array
person DevZer0    schedule 23.06.2013
comment
Ты такой потрясающий!! >.< Большое спасибо. Это заняло бы у меня вечность, чтобы понять. Еще один небольшой вопрос. Пожалуйста, смотрите мой обновленный пост. - person AyB; 23.06.2013