元素在多维数组中显示的次数

时间:2015-07-21 22:55:06

标签: php

我需要知道一个"阶段"显示,如果它已完成或不完整。

最终目标是显示:

Phase 1: 50% completed
Phase 2: 0% completed

任务:

Array
(
    [0] => Array
        (
            [phase] => 1
            [tasks_status] => completed
        )

    [1] => Array
        (
            [phase] => 1
            [tasks_status] => pending
        )
    [2] => Array
        (
            [phase] => 2
            [tasks_status] => pending
        )
)

固定相:

Array
(
    [0] => Array
        (
            [title] => Briefing e Planejamento
            [id] => 1
            [created] => 1437436800
        )

    [1] => Array
        (
            [title] => Rabiscos e Design
            [id] => 2
            [created] => 1438128000
        )

)

修改

所以,在你回答的人的帮助下,我设法做到了!结果如下:

            /** Define wich tasks has been completed **/
            foreach ($tasks as $task) {
                if ($task['status'] == "completed") {
                    foreach ($fases as &$fase) {
                        if ($fase['id'] == $task['fase_id']) {
                            $fase['numero_total_fases']++;
                            $fase['completed']++;
                        }
                    }
                } elseif ($task['status'] == "pending") {
                    foreach ($fases as &$fase) {
                        if ($fase['id'] == $task['fase_id']) {
                            $fase['numero_total_fases']++;
                            $fase['pending']++;
                        }
                    }
                } elseif ($task['status'] == "behind schedule") {
                    foreach ($fases as &$fase) {
                        if ($fase['id'] == $task['fase_id']) {
                            $fase['numero_total_fases']++;
                            $fase['behind schedule']++;
                        }
                    }
                }
                unset($fase);
            }

            /** Define progress percentage **/
            foreach ($fases as &$fase) {
                $fase['progresso'] = round(($fase['completed'] / ($fase['numero_total_fases'])) * 100);
            }

            /** Print phases progress **/
            $f = 1;
            foreach ($fases as $fase) {
                echo 'Fase '.$f.' - '.$fase['title'].' = '.$fase['progresso'].'% completed';
            }

3 个答案:

答案 0 :(得分:1)

这就是你想要的吗?

我假设您要根据原始数组计算百分比。

<?php

$tasks = array(
    array(
        'phase' => 1,
        'tasks_status' => 'completed'
    ),
    array(
        'phase' => 1,
        'tasks_status' => 'pending'
    ),
    array(
        'phase' => 2,
        'tasks_status' => 'pending'
    ),
);

$phases_arr = array();
foreach($tasks as $task) {
    if(!array_key_exists($task['phase'], $phases_arr)) {
        $phases_arr[$task['phase']] = array();
    }
    $phases_arr[$task['phase']][] = $task;
}

$phases = array();

foreach($phases_arr as $phase_num => $phase) {
    $p = array(
        'phase' => $phase_num,
        'total' => count($phase),
        'complete' => 0,
        'percent' => 0
    );

    foreach($phase as $task) {
        if($task['complete']) $p['complete']++;
    }

    $p['percent'] = ($p['complete'] / $p['total']) * 100;
    $phases[$phase_num] = $p;
}

foreach($phases as $phase) {
    echo "<p>Phase {$phase['phase']}: {$phase['percent']}% completed</p>";
}

答案 1 :(得分:1)

抽签有点慢,但既然我已经写过了,这里也是我的答案。看到大多数编程任务可以通过多种方式完成总是有帮助的:

<?php 
  $tasks = array(
    array(
      'phase' => 1,
      'tasks_status' => 'completed'
    ),
    array(
      'phase' => 1,
      'tasks_status' => 'pending'
    ),
    array(
      'phase' => 2,
      'tasks_status' => 'pending'
    )
  );
  //$phases = array();
  $phases = array(
    1=>array(
      'title'=>'Briefing e Planejamento',
      'id'=>1,
      'created'=>1437436800
    ),
    2=>array(
      'title'=>'Rabiscos e Design',
      'id'=>2,
      'created'=>1438128000
    )
  );

  foreach($tasks as $key=>$task){
    if(isset($phases[$task['phase']])){
      $thisPhase = $phases[$task['phase']];
    }
    else{
      $thisPhase = array(
        'completed' => 0,
        'pending' => 0
      );
    }
    $thisPhase[$task['tasks_status']]++;
    $phases[$task['phase']] = $thisPhase;
  }

  foreach($phases as $name=>$phase){
    echo $phase['title'].": ".round(($phase['completed'] / ($phase['completed'] + $phase['pending'])) * 100)."% completed <br>";
  }
?>

我知道你已经完成了,但是关于阶段阵列 - 你应该把它放在原始问题中,如果你想要它已经解决了问题。但是,我的建议是使用阶段的ID作为阶段数组中的索引名称。我发布的解决方案也适用于此 - 然后您可以在最终的foreach循环中使用$ phase来显示标题或创建时间。

答案 2 :(得分:1)

您的意见,

$tasks = array( array('phase' => 1, 'tasks_status' => 'completed'),
                array('phase' => 1, 'tasks_status' => 'pending'),
                array('phase' => 2, 'tasks_status' => 'pending'),
          );

考虑一下,

$phase = array();

foreach ($tasks as $key => $value)
{
    $phase[$value['phase']][] = $value['tasks_status'] == 'completed' ? 50 : 0 ;
}

function get_phase_percentage($i)
{
    global $phase;
    if(isset($phase[$i]) && is_array($phase[$i]))
        return array_sum($phase[$i]);
    return 0;
}

使用它,

Phase 1: <?php echo get_phase_percentage(1)?>% completed
Phase 2: <?php echo get_phase_percentage(2)?>% completed