PHP - 数组替换相同的值并显示少一个记录

时间:2015-11-23 09:24:58

标签: php arrays

$hours_effort_result输出

Array
(
    [0] => Array
        (
            [0] => Array
                (
                    [EMPLOYEEID] => 14453
                    [EMPLOYEE_NAME] => User 1
                    [SKILL_NAME] => Application Software
                    [PROJECTED_HOURS] => 20
                    [SITE_STATUS] => Offshore
                    [MONTH_YEAR] => JUL-2015
                )

            [1] => Array
                (
                    [EMPLOYEEID] => 14559
                    [EMPLOYEE_NAME] => User 2
                    [SKILL_NAME] => Application Software
                    [PROJECTED_HOURS] => 50
                    [SITE_STATUS] => Offshore
                    [MONTH_YEAR] => JUL-2015
                )

            [2] => Array
                (
                    [EMPLOYEEID] => 14559
                    [EMPLOYEE_NAME] => User 2
                    [SKILL_NAME] => Application Software
                    [PROJECTED_HOURS] => 150
                    [SITE_STATUS] => Offshore
                    [MONTH_YEAR] => JUL-2015
                )

            [3] => Array
                (
                    [EMPLOYEEID] => 14611
                    [EMPLOYEE_NAME] => User 3
                    [SKILL_NAME] => Application Software
                    [PROJECTED_HOURS] => 60
                    [SITE_STATUS] => Offshore
                    [MONTH_YEAR] => JUL-2015
                )

数组操作

$user_array = Array();
foreach ($hours_effort_result as $key => $data) {

                if (!empty($data)) {

                    foreach ($data as $key => $val) {

                        if ('JUL-2015' == $month) {


                            $user_array[$val['EMPLOYEE_NAME']][$month]['EMPLOYEEID'] = $val['ACTUAL_HOURS'];
                            $user_array[$val['EMPLOYEE_NAME']][$month]['SITE_STATUS'] = $val['SITE_STATUS'];
                            $user_array[$val['EMPLOYEE_NAME']][$month]['PROJECTED_HOURS'] = $val['PROJECTED_HOURS'];

                        }
                    }
                }
            }

$user_array输出

Array
(
    [User 1] => Array
        (
            [JUL-2015] => Array
                (
                    [EMPLOYEEID] => 14453
                    [SITE_STATUS] => Offshore
                    [PROJECTED_HOURS] => 20
                )

        )

    [User 2] => Array
        (
            [JUL-2015] => Array
                (
                    [EMPLOYEEID] => 14559
                    [SITE_STATUS] => Offshore
                    [PROJECTED_HOURS] => 150
                )

        )

    [User 3] => Array
        (
            [JUL-2015] => Array
                (
                    [EMPLOYEEID] => 14611
                    [SITE_STATUS] => Offshore
                    [PROJECTED_HOURS] => 60
                )

        )

此处$user_arrayUser 2的两条记录,但仅显示one条记录。值存储在同一key,因此它会覆盖并显示该key的最后一个值

如何避免这种情况并显示来自$hours_effort_result的相同数量的记录?

所需的最终结果

Array
(
    [User 1] => Array
        (
            [JUL-2015] => Array
                (
                    [EMPLOYEEID] => 14453
                    [SITE_STATUS] => Offshore
                    [PROJECTED_HOURS] => 20
                )

        )

    [User 2] => Array
        (
            [JUL-2015] => Array
                (
                    [EMPLOYEEID] => 14559
                    [SITE_STATUS] => Offshore
                    [PROJECTED_HOURS] => 50
                )

        )


    [User 2] => Array
        (
            [JUL-2015] => Array
                (
                    [EMPLOYEEID] => 14559
                    [SITE_STATUS] => Offshore
                    [PROJECTED_HOURS] => 150
                )

        )

    [User 3] => Array
        (
            [JUL-2015] => Array
                (
                    [EMPLOYEEID] => 14611
                    [SITE_STATUS] => Offshore
                    [PROJECTED_HOURS] => 60
                )

        )

3 个答案:

答案 0 :(得分:0)

更改您的PHP代码并尝试使用agian: -

$final_array = Array();
foreach ($hours_effort_result as $key => $data)
{
    if (!empty($data))
    {
        foreach ($data as $key => $val)
        {
            if ('JUL-2015' == $month)
            {
                $user_array = Array();

                $user_array[$val['EMPLOYEE_NAME']][$month]['EMPLOYEEID'] = $val['ACTUAL_HOURS'];
                $user_array[$val['EMPLOYEE_NAME']][$month]['SITE_STATUS'] = $val['SITE_STATUS'];
                $user_array[$val['EMPLOYEE_NAME']][$month]['PROJECTED_HOURS'] = $val['PROJECTED_HOURS'];

                array_push($final_array, $user_array);
            }
        }
    }
}

现在打印$ final_array,你得到了你想要的答案。

答案 1 :(得分:0)

问题是你正在使用其他东西作为关键,而且它不是唯一的。员工姓名与原始数组中的记录1和2相同。

只需为第二个数组使用唯一键。

答案 2 :(得分:-1)

相反

$user_array[$val['EMPLOYEE_NAME']][$month]['EMPLOYEEID'] = $val['ACTUAL_HOURS'];
$user_array[$val['EMPLOYEE_NAME']][$month]['SITE_STATUS'] = $val['SITE_STATUS'];
$user_array[$val['EMPLOYEE_NAME']][$month]['PROJECTED_HOURS'] = $val['PROJECTED_HOURS'];

使用

if (!isset($user_array[$val['EMPLOYEE_NAME']][$month])) {
     $user_array[$val['EMPLOYEE_NAME']][$month] = array();
}
$user_array[$val['EMPLOYEE_NAME']][$month][] = array(
     'EMPLOYEEID' => $val['ACTUAL_HOURS'],
     'SITE_STATUS' => $val['SITE_STATUS'],
     'PROJECTED_HOURS' => $val['PROJECTED_HOURS']
);