从2个现有多维数组创建多维数组

时间:2020-03-08 16:40:20

标签: php

使用2个独立的维数组时,我正在处理一些不匹配的数据。

所以我有第一个数组$distinctAssg

Array (4)
0 => "passport"
1 => "certificates"
2 => "degrees"
3 => "bla bal"

第二个$ group_assgn

Array (2)
test tert => Array (3)
  passport => Array (6)
    id => "1"
    assgn => "passport"
    status => "passed"
    name => "test"
    surname => "tert"
    branches_ID => "1"
  certificates => Array (6)
    id => "2"
    assgn => "certificates"
    status => "started"
    name => "test"
    surname => "tert"
    branches_ID => "1"
  bla bal => Array (6)
    id => "4"
    assgn => "bla bal"
    status => "started"
    name => "test"
    surname => "tert"
    branches_ID => "1"
john doe => Array (3)
  passport => Array (6)
    id => "1"
    assgn => "passport"
    status => "started"
    name => "john"
    surname => "doe"
    branches_ID => "1"
  certificates => Array (6)
    id => "2"
    assgn => "certificates"
    status => "passed"
    name => "john"
    surname => "doe"
    branches_ID => "1"
  degrees => Array (6)
    id => "3"
    assgn => "degrees"
    status => "completed"
    name => "john"
    surname => "doe"
    branches_ID => "1"

因为用户可以根据他们完成的任务分配作业,所以我想建立一个数组来创建一个表,但是我需要数据以正确的顺序排列。为什么我不匹配,因为度数最终是空的。我想和distinctAssg有相同的顺序。

这是我的代码:

$response = array();
        foreach ($distinctAssg as $value)
        {
            foreach ($group_assgn as $key => $user_asg)
            {
                var_dump($user_asg);
                if(in_array($value, array_column($user_asg, 'assgn')))
                {
                    if (!array_key_exists($value, $response[$key])) {
                        $response[$key] = $user_asg;
                    }
                }
                else {
                    if (!array_key_exists($value, $response[$key])) {
                        $response[$key][$value] = array('status' => 'empty');
                    }
                }
            }
        }

这就是我得到的。

Array (2)
test tert=> Array (4)
  passport => Array (6)
    id => "1"
    assgn => "passport"
    status => "passed"
    name => "test"
    surname => "tert"
    branches_ID => "1"
  certificates => Array (6)
    id => "2"
    assgn => "certificates"
    status => "started"
    name => "test"
    surname => "tert"
    branches_ID => "1"
  bla bal => Array (6)
    id => "4"
    assgn => "bla bal"
    status => "started"
    name => "test"
    surname => "tert"
    branches_ID => "1"
  degrees => Array (1)
    status => "empty"
john doe => Array (4)
  passport => Array (6)
    id => "1"
    assgn => "passport"
    status => "started"
    name => "john"
    surname => "doe"
    branches_ID => "1"
  certificates => Array (6)
    id => "2"
    assgn => "certificates"
    status => "passed"
    name => "john"
    surname => "doe"
    branches_ID => "1"
  degrees => Array (6)
    id => "3"
    assgn => "degrees"
    status => "completed"
    name => "john"
    surname => "doe"
    branches_ID => "1"
  bla bal => Array (1)
    status => "empty"

我怎么能拥有相同的顺序,因为如果不存在,我将其添加为空

1 个答案:

答案 0 :(得分:0)

尝试此可行的解决方案here。请下次发布正确的数组,而不是vardumpprint_r结果。

$keys = ["passport", "certificates", "degrees", "bla bal"];

$dataArr = [
    "test tert" => [
        "passport" => [
            "id" => "1",
            "assgn" => "passport",
            "status" => "passed",
            "name" => "test",
            "surname" => "tert",
            "branches_ID" => "1",
        ],
        "certificates" => [
            "id" => "2",
            "assgn" => "certificates",
            "status" => "started",
            "name" => "test",
            "surname" => "tert",
            "branches_ID" => "1",
        ],
        "bla bal" => [
            "id" => "4",
            "assgn" => "bla bal",
            "status" => "started",
            "name" => "test",
            "surname" => "tert",
            "branches_ID" => "1",
        ]
    ],
    "john doe" => [
        "passport" => [
            "id" => "1",
            "assgn" => "passport",
            "status" => "passed",
            "name" => "test",
            "surname" => "tert",
            "branches_ID" => "1",
        ],
        "certificates" => [
            "id" => "2",
            "assgn" => "certificates",
            "status" => "started",
            "name" => "test",
            "surname" => "tert",
            "branches_ID" => "1",
        ],
        "degrees" => [
            "id" => "3",
            "assgn" => "degrees",
            "status" => "completed",
            "name" => "john",
            "surname" => "doe",
            "branches_ID" => "1",
        ],
    ],
];


$res = [];
foreach($dataArr as $key=>$val){
    $obj_keys = array_keys($val);
    foreach($keys as $k){
        $res[$key][$k] = in_array($k, $obj_keys)?$val[$k]:[];
    }
}

print_r($res);
相关问题