Я хочу добавить частоту на основе позиции ранжирования, выполнение которой частично выполняется не точно - PHP - PullRequest
0 голосов
/ 28 мая 2019

У меня есть условная функция, выполнение которой не выполняется согласно бизнес-требованиям, и которая требует преобразования как с желаемым результатом. Эта функция содержит ранжирование и частоту, которые являются частью многомерного массива, и их суммирование на основе некоторых вычислений

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

<?php
$arr = array (
    'AMXB 5321'  => array(
        array("course_title_code" => "AMB 5321",
              "content" => "Course",
              "total" => "303",
              "count" => "85",
              "ranking" => array(array(5),array(2,4,5)),
              "frequency" => array(array(5),array(1,2,11))),
        array("course_title_code" => "AMB 5321",
              "content" => "Succeed in the course",
              "total" => "300",
              "count" => "85",
              "ranking" => array(array(3,5),array(3,4,5)),
              "frequency" => array(array(1,4),array(1,2,11))
             )
    ));

array_walk($arr, function(&$v,$k){
    foreach($v as $key => &$s){
        $s['ranking'] = implode(',',range(1,5));
        foreach($s['frequency'] as $key => &$value){
            $temp   = $value;
            $value = (count($value) == 5) ? $value : array_merge(array_fill(0, 5 - count($value), 0), $temp);
            if($key == 1){
                for($i=0;$i<count($value);$i++){
                    $value[$i] += $s['frequency'][$key-1][$i];
                } 
                $temFormat = implode(',',$s['frequency'][1]);
            } 
        }
        unset($s['frequency']); 
        $s['frequency'] = $temFormat;
    }
});

echo "<pre>";
print_r($arr);

?>

Желаемый результат

Array
(
    [AMXB 5321] => Array
        (
            [0] => Array
                (
                    [course_title_code] => AMB 5321
                    [content] => Course
                    [total] => 303
                    [count] => 85
                    [ranking] => 1,2,3,4,5
                    [frequency] => 0,1,0,2,16
                )

            [1] => Array
                (
                    [course_title_code] => AMB 5321
                    [content] => Succeed in the course
                    [total] => 300
                    [count] => 85
                    [ranking] => 1,2,3,4,5
                    [frequency] => 0,0,2,2,15
                )

        )

)

1 Ответ

2 голосов
/ 28 мая 2019

Вы можете сделать это так:

function calRanking($ranks, $freqs) {
    $res = array_fill(0, 5, 0); // create array of 0
    foreach($ranks as $k => $v) {
        foreach(array_map(null, $v,  $freqs[$k]) as $e) {
            $res[$e[0]-1]+= $e[1]; //add the frequency according to rank key
        }
    }
    return $res;
}

foreach($a as &$v) { // for each calculate and implode 
    $v["frequency"] = implode(',', calRanking($v["ranking"], $v["frequency"]));
    $v["ranking"] = implode(',',range(1,5));
}

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

Живой пример: 3v4l

Ссылка: заполнение массива , карта массива

...