在 php 或 angular 中处理关联数组

Handling associative array either in php or angular

我的 PHP 代码得到以下数组结果。

$aa = {
        "1": [
            {
                "ID": "1",
                "IDu": "1",
                "doc_picture": "yes",
                "doc_contract": "no",
                "doc_name": "images201103928128.jpg"
            },
            {
                "ID": "1",
                "IDu": "1",
                "doc_picture": "no",
                "doc_contract": "yes",
                "doc_name": "images20110_doc.jpg"
            },
            {
                "ID": "1",
                "IDu": "1",
                "doc_picture": "yes",
                "doc_contract": "no",
                "doc_name": "28128.jpg"
            },
            {
                "ID": "1",
                "IDu": "1",
                "doc_picture": "yes",
                "doc_contract": "no",
                "doc_name": "i128.jpg"
            }
        ],
        "2": [
            {
                "ID": "2",
                "IDu": "1",
                "doc_picture": "yes",
                "doc_contract": "no",
                "doc_name": "i12fsdf8.jpg"
            },
            {
                "ID": "2",
                "IDu": "1",
                "doc_picture": "yes",
                "doc_contract": "no",
                "doc_name": "i12fffffsdf8.jpg"
            },
            {
                "ID": "2",
                "IDu": "1",
                "doc_picture": "no",
                "doc_contract": "yes",
                "doc_name": "dddf8_doc.jpg"
            }
        ],
        "5": [
            {
                "IDaut": "5",
                "IDusr": "1",
                "doc_picture": null,
                "doc_contract": null,
                "doc_name": null
            }
        ],
        "6": [
            {
                "ID": "6",
                "IDu": "1",
                "doc_picture": "no",
                "doc_contract": "yes",
                "doc_name": "d8_doc.jpg"
            },
            {
                "ID": "6",
                "IDu": "1",
                "doc_picture": "yes",
                "doc_contract": "no",
                "doc_name": "f8.jpg"
            },
            {
                "ID": "6",
                "IDu": "1",
                "doc_picture": "yes",
                "doc_contract": "no",
                "doc_name": "d.jpg"
            },
            {
                "ID": "6",
                "IDu": "1",
                "doc_picture": "no",
                "doc_contract": "yes",
                "doc_name": "gg_doc.jpg"
            }
        ]
    };

如您所见,每个关联数组的唯一区别仅在于 doc_name。

我需要的是生成这个数组...

$aa = {
        "1": [
            {
                "ID": "1",
                "IDu": "1",
                "doc_name": "images201103928128.jpg_picture",
                "doc_name": "images20110_doc.jpg_document", 
                "doc_name": "28128.jpg_picture", 
                "doc_name": "i128.jpg_picture"
            },
        ],
        "2": [
            {
                "ID": "2",
                "IDu": "1",
                "doc_name": "i12fsdf8.jpg_picture",
                "doc_name": "i12fffffsdf8.jpg_picture",
                "doc_name": "dddf8_doc.jpg_document"
            },
        ],
        "5": [
            {
                "IDaut": "5",
                "IDusr": "1",
                "doc_picture": null,
                "doc_contract": null,
                "doc_name": null
            }
        ],
        "6": [
            {
                "ID": "6",
                "IDu": "1",
                "doc_name": "d8_doc.jpg_document",
                "doc_name": "f8.jpg_picture",
                "doc_name": "d.jpg_picture",
                "doc_name": "gg_doc.jpg_documen"
            },
        ]
    };

这是PHP代码...

function get_List($ID)
    {

        $this->db >select('u.ID,u.IDu,d.doc_picture,
                           d.doc_contract,d.doc_name,
                           a.*');
        $this->db->from('t_user u'); 
        $this->db->join('t_doc d', 'd.ID=u.ID', 'left');
        $this->db->where('u.ID',$ID);         

        $query = $this->db->get();
        $result = $query->result_array();

        $group = array();

        foreach($result as $val) {
            $group[$val['ID']][] = $val;
        }
        return $group;
    }

结果是,我只需要根据他们的 ID 进行分组,并显示所有 doc_name 标签及其相关文档类型,如上所示。

我怎样才能做到这一点?在 PHP 或 Angular 过滤器中...无论您提出什么解决方案,我都会非常高兴...

提前致谢

我会这样做:

$newArray = array();
foreach($aa as $key => $array) {
  $ids = array();
  foreach($array as $elements) {
    $ukey = $elements['ID'].$elements['IDu'];
    if(!isset($ids[$ukey])) $ids[$ukey] = array('ID' => $elements['ID'], 'IDu' => $elements['IDu']);
    $ext = '';
    if($elements['doc_picture'] === 'yes')  $ext = '_picture';
    else if($elements['doc_contract'] === 'yes') $ext = '_document';
    $ids[$ukey]['doc_name'][] = $elements['doc_name'].$ext;
  }
  foreach($ids as $id) {
    if(!isset($newArray[$key])) $newArray[$key] = array();
    array_push($newArray[$key],$id);
  }
}
// this will print out what you requested
print_r($newArray);

对此的一些说明:

  • 不能有多个 doc_name 键,因为键在数组中必须是唯一的。因此,doc_name 将是一个数组。
  • 使用此解决方案,您可以有多个不同的 IDu 数字,它会为这些数字创建一个单独的数组(这是我期望的行为,因为您没有写过)。

我使用以下数组进行测试(请注意,我添加了更多条目以便您可以看到完整的行为):

$aa = array("1" => array(array("ID" => "1","IDu" => "1","doc_picture" => "yes","doc_contract" => "no","doc_name" => "images201103928128.jpg"),
                         array("ID" => "1","IDu" => "1","doc_picture" => "no","doc_contract" => "yes","doc_name" => "images20110_doc.jpg"),
                         array("ID" => "1","IDu" => "1","doc_picture" => "yes","doc_contract" => "no","doc_name" => "28128.jpg"),
                         array("ID" => "1","IDu" => "2","doc_picture" => "yes","doc_contract" => "no","doc_name" => "4567.jpg"),
                         array("ID" => "1","IDu" => "2","doc_picture" => "no","doc_contract" => "yes","doc_name" => "1234.jpg"),
                         array("ID" => "1","IDu" => "1","doc_picture" => "yes","doc_contract" => "no","doc_name" => "i128.jpg")),
            "2" => array(array("ID" => "2","IDu" => "1","doc_picture" => "yes","doc_contract" => "no","doc_name" => "i12fsdf8.jpg"),
                         array("ID" => "2","IDu" => "1","doc_picture" => "yes","doc_contract" => "no","doc_name" => "i12fffffsdf8.jpg"),
                         array("ID" => "2","IDu" => "1","doc_picture" => "no","doc_contract" => "yes","doc_name" => "dddf8_doc.jpg")),
            "5" => array(array("ID" => "5","IDu" => "1","doc_picture" => null,"doc_contract" => null,"doc_name" => null)),
            "6" => array(array("ID" => "6","IDu" => "1","doc_picture" => "no","doc_contract" => "yes","doc_name" => "d8_doc.jpg"),
                         array("ID" => "6","IDu" => "1","doc_picture" => "yes","doc_contract" => "no","doc_name" => "f8.jpg"),
                         array("ID" => "6","IDu" => "1","doc_picture" => "yes","doc_contract" => "no","doc_name" => "d.jpg"),
                         array("ID" => "6","IDu" => "1","doc_picture" => "no","doc_contract" => "yes","doc_name" => "gg_doc.jpg")));