Обработка ассоциативного массива в php или 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;
}

То, что произошло, мне просто нужно сгруппировать в соответствии с их идентификатором и показать все теги doc_name с типом ассоциированного документа, как вы видите выше.

Как я мог этого добиться? В PHP или Angular filter … какое бы решение вы ни предложили, я буду очень рад …

Заранее спасибо

1

Решение

Я бы сделал это так:

$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")));
1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector