Теперь, может быть, это потому, что я устал, но в последний час я поставил себя в круговорот, пытаясь упорядочить массив по-другому (array_column()
, array_map()
и несколько foreach()
и if()
) - и результат этого вихря оказался настолько запутанным, что я больше не вижу деревьев в лесу, и, честно говоря, мне стыдно даже публиковать код спагетти, который я пробовал :-).
Массив выглядит так:
array (
0 =>
array (
0 => '29',
1 => '0m9-cart-main-app',
2 => '2108',
3 => '9',
),
1 =>
array (
0 => '16',
1 => '0m9-safe-box-server',
2 => '2017',
3 => '12',
),
2 =>
array (
0 => '2',
1 => '0m9art-main-app-nodejs',
2 => '2017',
3 => '2',
),
3 =>
array (
0 => '1',
1 => '0m9art-server-golang',
2 => '2017',
3 => '4',
),
4 =>
array (
0 => '17',
1 => '0m9panel',
2 => '2017',
3 => '7',
),
5 =>
array (
0 => '3',
1 => 'moli-server',
2 => '2017',
3 => '3',
),
6 =>
array (
0 => '2',
1 => 'igcc',
2 => '2017',
3 => '11',
),
7 =>
array (
0 => '26',
1 => '0m9-cart-main-app',
2 => '2108',
3 => '10',
),
8 =>
array (
0 => '18',
1 => '0m9-safe-box-python-app',
2 => '2108',
3 => '12',
),
9 =>
array (
0 => '1',
1 => '0m9art-evergreen-android-app',
2 => '2108',
3 => '5',
), ......
Массив продолжается (около 700 строк), где array[0] = count
, array[1] = name
, array[2] = year
, array[3] = month
это в основном агрегациявсех коммитов во всех git-репозиториях одного человека, и цель состоит в том, чтобы каждый месяц иметь приблизительное распределение рабочей нагрузки для каждого проекта.
что мне нужно знать для каждого MONTH
из YEAR
каков примерный процент NAME-COUNT
(репо-коммитов) от общего числа MONTH-COUNT-OF-ALL-NAMES
(ежемесячный общий коммит).
так что я уверен, что есть элегантный однострочный, чтобы решить этот ужасный массив, ноЯ просто не могу сделатьчто больше ..
РЕДАКТИРОВАТЬ I
Я почти уверен, что то, что я сделал, только еще больше запутает всех, но так как комментарии спросили - вот некоторые из моихпытается переставить массив:
массив получен из csv, поэтому
$csv = array_map('str_getcsv', file('git_stati.csv'));
дают исходный массив, размещенный выше ..
`
// try I
foreach($csv as $line){
$i=1;
// $r_date[] = $line[2] . $line[3] ;
$r_date = $line[2] .'-'. $line[3] ;
$r_dater[$r_date.'-'.$line[1] ] = $line[0] ;
$r_new[$line[1]]= $line[0] ;
$i++;
}
`// try II
foreach($csv as $line){
if ( $line[2] == '2018' ){
$name[] = $line[1] ;
$count[$line[1] ] += $line[0];
}
if ( $line[2] == '2017' ){
$name[] = $line[1] ;
$count[$line[1] ] += $line[0];
}
}
// try III
// foreach($r_dater as $key => $val) {
// if(substr($key, 0, 6) == '2018-9'){
// $str2 = substr($key, 7);
// $special_items[$key] = $val;
// $repo_r[$str2]= $val;
// }
// }
// other failed confusing trials ...
highlight_string("<?php\n\$data =\n". var_export($r_dater, true) . ";\n?>");
РЕДАКТИРОВАТЬ II
Это, по сути, агрегация всех коммитов во всех git-репозиториях одного человека, и цель состоит в том, чтобы каждый месяц иметь приблизительное распределение распределения нагрузки по проекту
мне нужно знать для каждого MONTH
из YEAR
каков приблизительный процент NAME-COUNT
(репо-коммитов) от общего числа MONTH-COUNT-OF-ALL-NAMES
(ежемесячный общий коммит).
Для примера массива желаемый вывод будет выглядеть примерно так:
'2018-09 =>
array (
'repo_name' => '0m9-cart-main-app',
'commits' => 29,
'% of total commits for 2018-09 => 'x.xx%',
),