PHP数组重新排列为多维

PHP数组重新排列为多维,php,arrays,multidimensional-array,Php,Arrays,Multidimensional Array,我有一个这样的数组结构,想把它重新安排到下面的那个。有没有更快/更简单的解决方案的建议?我已经添加了日期。谢谢!:) 输入: Array ( [0] => Array ( [user_id] => 255 [display_name] => Mark [company_name] => Company_A ) [1] => Array

我有一个这样的数组结构,想把它重新安排到下面的那个。有没有更快/更简单的解决方案的建议?我已经添加了日期。谢谢!:)

输入:

Array
(
    [0] => Array
        (
            [user_id] => 255
            [display_name] => Mark
            [company_name] => Company_A
        )
    [1] => Array
        (
            [user_id] => 150
            [display_name] => Paul
            [company_name] => Company_A
        )
    [2] => Array
        (
            [user_id] => 25
            [display_name] => Hulk
            [company_name] => Company_B
        )
    [3] => Array
        (
            [user_id] => 50
            [display_name] => Bob
            [company_name] => Company_B
        )
)
Array
(
    [Company_A] => Array
        (
            [company_total_hours] => 20h 45m
            [employees] => Array
                (
                    [0] => Array
                        (
                            [user_id] => 255
                            [display_name] => Mark
                        )
                    [1] => Array
                        (
                            [user_id] => 150
                            [display_name] => Paul
                        )
                )
        )
    [Company_B] => Array
        (
            [company_total_hours] => 7h 30m
            [employees] => Array
                (
                    [0] => Array
                        (
                            [user_id] => 25
                            [display_name] => Hulk
                        )
                    [1] => Array
                        (
                            [user_id] => 50
                            [display_name] => Bob
                        )
                )
        )
)
<?php
$company_names = array();
foreach ($records as $k => $v) {
    $company_names[] = $v->company_name;
}
$company_names = array_unique($company_names);

// hard coded testing
if (count($company_names) > 0) {
    foreach($company_names as $k2 => $v2) {
        $final_array[$v2]['company_total_hours'] = rand(1, 20);

        $final_array[$v2]['employees'] = array(
            array('user_id' => '255', 'display_name' => 'Mark'),
            array('user_id' => '150', 'display_name' => 'Paul')
        );
    }
}

// on-going testing right now here....
Array
(
    [Company_A] => Array
        (
            [employees] => Array
                (
                    [0] => Array
                        (
                            [display_name] => Mark
                            [user_id] => 255
                        )

                    [1] => Array
                        (
                            [display_name] => Paul
                            [user_id] => 150
                        )

                )

        )

    [Company_B] => Array
        (
            [employees] => Array
                (
                    [0] => Array
                        (
                            [display_name] => Hulk
                            [user_id] => 25
                        )

                    [1] => Array
                        (
                            [display_name] => Bob
                            [user_id] => 50
                        )

                )

        )

)
输出:

Array
(
    [0] => Array
        (
            [user_id] => 255
            [display_name] => Mark
            [company_name] => Company_A
        )
    [1] => Array
        (
            [user_id] => 150
            [display_name] => Paul
            [company_name] => Company_A
        )
    [2] => Array
        (
            [user_id] => 25
            [display_name] => Hulk
            [company_name] => Company_B
        )
    [3] => Array
        (
            [user_id] => 50
            [display_name] => Bob
            [company_name] => Company_B
        )
)
Array
(
    [Company_A] => Array
        (
            [company_total_hours] => 20h 45m
            [employees] => Array
                (
                    [0] => Array
                        (
                            [user_id] => 255
                            [display_name] => Mark
                        )
                    [1] => Array
                        (
                            [user_id] => 150
                            [display_name] => Paul
                        )
                )
        )
    [Company_B] => Array
        (
            [company_total_hours] => 7h 30m
            [employees] => Array
                (
                    [0] => Array
                        (
                            [user_id] => 25
                            [display_name] => Hulk
                        )
                    [1] => Array
                        (
                            [user_id] => 50
                            [display_name] => Bob
                        )
                )
        )
)
<?php
$company_names = array();
foreach ($records as $k => $v) {
    $company_names[] = $v->company_name;
}
$company_names = array_unique($company_names);

// hard coded testing
if (count($company_names) > 0) {
    foreach($company_names as $k2 => $v2) {
        $final_array[$v2]['company_total_hours'] = rand(1, 20);

        $final_array[$v2]['employees'] = array(
            array('user_id' => '255', 'display_name' => 'Mark'),
            array('user_id' => '150', 'display_name' => 'Paul')
        );
    }
}

// on-going testing right now here....
Array
(
    [Company_A] => Array
        (
            [employees] => Array
                (
                    [0] => Array
                        (
                            [display_name] => Mark
                            [user_id] => 255
                        )

                    [1] => Array
                        (
                            [display_name] => Paul
                            [user_id] => 150
                        )

                )

        )

    [Company_B] => Array
        (
            [employees] => Array
                (
                    [0] => Array
                        (
                            [display_name] => Hulk
                            [user_id] => 25
                        )

                    [1] => Array
                        (
                            [display_name] => Bob
                            [user_id] => 50
                        )

                )

        )

)
我的尝试:

Array
(
    [0] => Array
        (
            [user_id] => 255
            [display_name] => Mark
            [company_name] => Company_A
        )
    [1] => Array
        (
            [user_id] => 150
            [display_name] => Paul
            [company_name] => Company_A
        )
    [2] => Array
        (
            [user_id] => 25
            [display_name] => Hulk
            [company_name] => Company_B
        )
    [3] => Array
        (
            [user_id] => 50
            [display_name] => Bob
            [company_name] => Company_B
        )
)
Array
(
    [Company_A] => Array
        (
            [company_total_hours] => 20h 45m
            [employees] => Array
                (
                    [0] => Array
                        (
                            [user_id] => 255
                            [display_name] => Mark
                        )
                    [1] => Array
                        (
                            [user_id] => 150
                            [display_name] => Paul
                        )
                )
        )
    [Company_B] => Array
        (
            [company_total_hours] => 7h 30m
            [employees] => Array
                (
                    [0] => Array
                        (
                            [user_id] => 25
                            [display_name] => Hulk
                        )
                    [1] => Array
                        (
                            [user_id] => 50
                            [display_name] => Bob
                        )
                )
        )
)
<?php
$company_names = array();
foreach ($records as $k => $v) {
    $company_names[] = $v->company_name;
}
$company_names = array_unique($company_names);

// hard coded testing
if (count($company_names) > 0) {
    foreach($company_names as $k2 => $v2) {
        $final_array[$v2]['company_total_hours'] = rand(1, 20);

        $final_array[$v2]['employees'] = array(
            array('user_id' => '255', 'display_name' => 'Mark'),
            array('user_id' => '150', 'display_name' => 'Paul')
        );
    }
}

// on-going testing right now here....
Array
(
    [Company_A] => Array
        (
            [employees] => Array
                (
                    [0] => Array
                        (
                            [display_name] => Mark
                            [user_id] => 255
                        )

                    [1] => Array
                        (
                            [display_name] => Paul
                            [user_id] => 150
                        )

                )

        )

    [Company_B] => Array
        (
            [employees] => Array
                (
                    [0] => Array
                        (
                            [display_name] => Hulk
                            [user_id] => 25
                        )

                    [1] => Array
                        (
                            [display_name] => Bob
                            [user_id] => 50
                        )

                )

        )

)

我不知道你的工作时间是从哪里来的,所以我把它删掉了

$i = 0;
foreach($vals as $keys => $arrays) {
        if(!isset($new[$arrays['company_name']]))
            $i = 0;
        $new[$arrays['company_name']]['employees'][$i]['display_name']  =   $arrays['display_name'];
        $new[$arrays['company_name']]['employees'][$i]['user_id']       =   $arrays['user_id'];
        $i++;
    }
给你:

Array
(
    [0] => Array
        (
            [user_id] => 255
            [display_name] => Mark
            [company_name] => Company_A
        )
    [1] => Array
        (
            [user_id] => 150
            [display_name] => Paul
            [company_name] => Company_A
        )
    [2] => Array
        (
            [user_id] => 25
            [display_name] => Hulk
            [company_name] => Company_B
        )
    [3] => Array
        (
            [user_id] => 50
            [display_name] => Bob
            [company_name] => Company_B
        )
)
Array
(
    [Company_A] => Array
        (
            [company_total_hours] => 20h 45m
            [employees] => Array
                (
                    [0] => Array
                        (
                            [user_id] => 255
                            [display_name] => Mark
                        )
                    [1] => Array
                        (
                            [user_id] => 150
                            [display_name] => Paul
                        )
                )
        )
    [Company_B] => Array
        (
            [company_total_hours] => 7h 30m
            [employees] => Array
                (
                    [0] => Array
                        (
                            [user_id] => 25
                            [display_name] => Hulk
                        )
                    [1] => Array
                        (
                            [user_id] => 50
                            [display_name] => Bob
                        )
                )
        )
)
<?php
$company_names = array();
foreach ($records as $k => $v) {
    $company_names[] = $v->company_name;
}
$company_names = array_unique($company_names);

// hard coded testing
if (count($company_names) > 0) {
    foreach($company_names as $k2 => $v2) {
        $final_array[$v2]['company_total_hours'] = rand(1, 20);

        $final_array[$v2]['employees'] = array(
            array('user_id' => '255', 'display_name' => 'Mark'),
            array('user_id' => '150', 'display_name' => 'Paul')
        );
    }
}

// on-going testing right now here....
Array
(
    [Company_A] => Array
        (
            [employees] => Array
                (
                    [0] => Array
                        (
                            [display_name] => Mark
                            [user_id] => 255
                        )

                    [1] => Array
                        (
                            [display_name] => Paul
                            [user_id] => 150
                        )

                )

        )

    [Company_B] => Array
        (
            [employees] => Array
                (
                    [0] => Array
                        (
                            [display_name] => Hulk
                            [user_id] => 25
                        )

                    [1] => Array
                        (
                            [display_name] => Bob
                            [user_id] => 50
                        )

                )

        )

)

我创建了一个函数,它的作用与@Rasclatt给出的答案相同

function groupByKeyValue($array, $oldKeyName, $newKeyName){
    $newArray = array();
    foreach($array as $key=>$value){
        if(isset($newArray[$value[$oldKeyName]][$newKeyName])){
            $newArray[$value[$oldKeyName]][$newKeyName][] = array('user_id'=> $value['user_id'], 'display_name' => $value['display_name']);
        }else{
            $newArray[$value[$oldKeyName]] = array($newKeyName => array(array('user_id'=> $value['user_id'], 'display_name' => $value['display_name'])));
        }
    }
    return $newArray;
}
//usage
$newArray = groupByKeyValue($array, 'company_name', 'employees');

您可以添加第三个参数来发送数组值的键,该数组值需要在“employees”的新数组中使用。请检查此链接以了解该功能的工作情况

请发布您的尝试。你尝试了什么,从哪里得到的?谢谢你做得很好。其他答案也同样有效。我刚刚加上了你忘了的“公司总小时”键。再次感谢:)