Объединить массив данных на основе ключа

#php #arrays

#php #массивы

Вопрос:

Необработанные данные

 Array
(
    [admin] => Array
        (
            [Sep] => 1
            [Aug] => 2
        )

    [student] => Array
        (
            [Sep] => 2
        )

    [trainer] => Array
        (
            [Jun] => 1
        )

)
  

Я застрял в логическом мышлении, чтобы разделить вышеуказанные данные. Приведенный выше массив будет зацикливать все данные пользователя. Как я могу объединить их в один массив на основе месяца. Это будет выглядеть так, как показано ниже.

 Array
     ( 
      [Jun] => Array 
         (
            [admin]   => 0
            [student] => 0
            [trainer] => 1
          
          )                                           
     [Aug] => Array 
          (
             [admin]   => 2
             [student] => 0
             [trainer] => 0                
          )
     [Sep] => Array 
          (
             [admin]   => 1
             [student] => 2
             [trainer] => 0                
          )
     )
  

Текущий код

 $uss = [];
        foreach ($userCount as $vkey => $vvalue) {
            foreach ($vvalue as $kgey => $vgalue) {
               
                $uss[$kgey] = $vgalue;
                
            }
        }
  

Комментарии:

1. Что вы пробовали до сих пор? Только этот подход, и ничего больше? Почему бы не использовать внешний массив повторно для разных месяцев?

Ответ №1:

Я думаю, что ваш код должен быть таким —

      $array = [
        'admin' => [
            'Sep' => 1,
            'Aug' => 2,
        ],
        'student' => [
            'Sep' => 2,
        ],
        'trainer' => [
            'Jun'=> 1,
        ]
    ];

    $uss = [];
    $prepareKeys = [];
    $onlyKeys = array_keys($array);
    foreach ($onlyKeys as $value) {
        $prepareKeys[$value] = 0;
    }
    foreach ($array as $vkey => $vvalue) {
        foreach ($vvalue as $kgey => $vgalue) {
            if(! isset($uss[$kgey])) {
                $uss[$kgey] = $prepareKeys;
            }
            $uss[$kgey][$vkey] = $vgalue;
        }
    }