2013-10-04 5 views
0

Я пытаюсь отформатировать ответ mysql в массив объектов, чтобы Angular мог легко пересечь данные.php Структура данных JSON для углового приложения

MySQL результат:

[{ 
    "FIAccountsID": "99", 
    "AccountName": "", 
    "AccountCustomName": "Brothers", 
    "AccountNumber": "99-123123123", 
    "AccountTypeName": "IRA", 
    "FinancialInstName": "Testes", 
    "FinancialInstID": "9", 
    "UserID": "1", 
    "ofxStatusCode": "500", 
    "UserAccountID": "09128-vc-12", 
    "FirstName": "Someones", 
    "LastName": "Name", 
    "Status": "1" 
}, 
{ 
    "FIAccountsID": "99", 
    "AccountName": "", 
    "AccountCustomName": "Brothers", 
    "AccountNumber": "99-123123123", 
    "AccountTypeName": "IRA", 
    "FinancialInstName": "Testes", 
    "FinancialInstID": "9", 
    "UserID": "1", 
    "ofxStatusCode": "500", 
    "UserAccountID": "09128-vc-12", 
    "FirstName": "Someones", 
    "LastName": "Name", 
    "Status": "2" 
}, 
{ 
    "FIAccountsID": "100", 
    "AccountName": "", 
    "AccountCustomName": "Brothers", 
    "AccountNumber": "99-123123123", 
    "AccountTypeName": "IRA", 
    "FinancialInstName": "Testes", 
    "FinancialInstID": "9", 
    "UserID": "1", 
    "ofxStatusCode": "500", 
    "UserAccountID": "09128-vc-12", 
    "FirstName": "Someones", 
    "LastName": "Name", 
    "Status": "1" 
}, 
{ 
    "FIAccountsID": "100", 
    "AccountName": "", 
    "AccountCustomName": "Brothers", 
    "AccountNumber": "99-123123123", 
    "AccountTypeName": "IRA", 
    "FinancialInstName": "Testes", 
    "FinancialInstID": "9", 
    "UserID": "1", 
    "ofxStatusCode": "500", 
    "UserAccountID": "09128-vc-12", 
    "FirstName": "Someones", 
    "LastName": "Name", 
    "Status": "2" 
}, 
{ 
    "FIAccountsID": "101", 
    "AccountName": "", 
    "AccountCustomName": "Brothers", 
    "AccountNumber": "99-123123123", 
    "AccountTypeName": "IRA", 
    "FinancialInstName": "Testes", 
    "FinancialInstID": "9", 
    "UserID": "1", 
    "ofxStatusCode": "500", 
    "UserAccountID": "09128-vc-12", 
    "FirstName": "Someones", 
    "LastName": "Name", 
    "Status": "1" 
}, 
{ 
    "FIAccountsID": "101", 
    "AccountName": "", 
    "AccountCustomName": "Brothers", 
    "AccountNumber": "99-123123123", 
    "AccountTypeName": "IRA", 
    "FinancialInstName": "Testes", 
    "FinancialInstID": "9", 
    "UserID": "1", 
    "ofxStatusCode": "500", 
    "UserAccountID": "09128-vc-12", 
    "FirstName": "Someones", 
    "LastName": "Name", 
    "Status": "2" 
}, 
{ 
    "FIAccountsID": "102", 
    "AccountName": "", 
    "AccountCustomName": "Brothers", 
    "AccountNumber": "99-123123123", 
    "AccountTypeName": "IRA", 
    "FinancialInstName": "Testes", 
    "FinancialInstID": "9", 
    "UserID": "1", 
    "ofxStatusCode": "500", 
    "UserAccountID": "09128-vc-12", 
    "FirstName": "Someones", 
    "LastName": "Name", 
    "Status": "1" 
}, 
{ 
    "FIAccountsID": "102", 
    "AccountName": "", 
    "AccountCustomName": "Brothers", 
    "AccountNumber": "99-123123123", 
    "AccountTypeName": "IRA", 
    "FinancialInstName": "Testes", 
    "FinancialInstID": "9", 
    "UserID": "1", 
    "ofxStatusCode": "500", 
    "UserAccountID": "09128-vc-12", 
    "FirstName": "Someones", 
    "LastName": "Name", 
    "Status": "2" 
}, 
{ 
    "FIAccountsID": "103", 
    "AccountName": "", 
    "AccountCustomName": "Brothers", 
    "AccountNumber": "99-123123123", 
    "AccountTypeName": "IRA", 
    "FinancialInstName": "Testes", 
    "FinancialInstID": "9", 
    "UserID": "1", 
    "ofxStatusCode": "500", 
    "UserAccountID": "09128-vc-12", 
    "FirstName": "Someones", 
    "LastName": "Name", 
    "Status": "1" 
}, 
{ 
    "FIAccountsID": "103", 
    "AccountName": "", 
    "AccountCustomName": "Brothers", 
    "AccountNumber": "99-123123123", 
    "AccountTypeName": "IRA", 
    "FinancialInstName": "Testes", 
    "FinancialInstID": "9", 
    "UserID": "1", 
    "ofxStatusCode": "500", 
    "UserAccountID": "09128-vc-12", 
    "FirstName": "Someones", 
    "LastName": "Name", 
    "Status": "2" 
}...... 

здесь РНР:

while($row = mysqli_fetch_assoc($result)) 
{ 

    $uid = $row['UserID']; 
    $name = $row['FirstName'].' '.$row['LastName']; 
    $fiid = $row['FinancialInstID']; 
    $fi = $row['FinancialInstName']; 
    $acctID = $row['FIAccountsID']; 


    $rows[$uid]['name'] = $name; 
    $rows[$uid]['uid'] = $uid; 
    $rows[$uid]['fi'][$fiid]['name'] = $fi; 
    $rows[$uid]['fi'][$fiid]['acct'][$acctID]['name'] = $row['AccountCustomName']; 

} 

print json_encode($rows); 

это то, что я получаю:

{ 
"1": { 
    "name": "Some Name", 
    "uid": "1", 
    "fi": { 
     "9": { 
      "name": "Testes", 
      "accts": { 
       "99": { 
        "name": "name 1" 
       }, 
       "100": { 
        "name": "name 2" 
       }, 
       "103": { 
        "name": "name 3" 
       } 
      } 
     } 
    } 
}, 
"2": { 
    "name": "Another Name", 
    "uid": "2", 
    "fi": { 
     "7": { 
      "name": "Trevor's Brokerage House", 
      "accts": { 
       "1": { 
        "name": "Sally's 401k Account" 
       }, 
       "2": { 
        "name": "retirement" 
       }, 
       "3": { 
        "name": "Some other account" 
.......... 

желаемого результата:

[ 
    { 
    "users": [ 
     { 
      "name": "Some Name", 
      "uid": "1", 
      "fi": [ 
       { 
        "name": "Testes", 
        "acct": [ 
         { 
          "name": "name 1" 
         }, 
         { 
          "name": "name 2" 
         }, 
         { 
          "name": "name 3" 
         } 
        ] 
       } 
      ] 
     }, 
     { 
      "name": "Another Name", 
      "uid": "2", 
      "fi": [ 
       { 
        "name": "Trevor's Brokerage House", 
        "acct": [ 
         { 
          "name": "Sally's 401k Account" 
         }, 
         { 
          "name": "retirement" 
         }, 
         { 
          "name": "Some other account" 
.......... 

Я хочу знать, как иметь структуру данных без уникальных ключей, префиксных вложенных массивов

+0

'$ json = array ('users' => array ('name' => 'name one', ...), array ('name' => 'name two'). ..)); ' –

+0

проблема заключается в том, что каждая строка в результирующем наборе записывает за последнее, если я делайте это так? – user2762149

ответ

0

Дело в том, что если вы определяете ключи, то json_encode будет их читать. Если вам не нужны ключи, объявите массив без них. Итак, вам нужно создать структуру массива в соответствии с желаемым результатом.

Но способ, которым располагают ваши данные, затрудняет его форматирование. Решение, которое я вижу в том, чтобы делать то, что вы уже делаете:

while($row = mysqli_fetch_assoc($result)) 
{ 

    $uid = $row['UserID']; 
    $name = $row['FirstName'].' '.$row['LastName']; 
    $fiid = $row['FinancialInstID']; 
    $fi = $row['FinancialInstName']; 
    $acctID = $row['FIAccountsID']; 


    $rows[$uid]['name'] = $name; 
    $rows[$uid]['uid'] = $uid; 
    $rows[$uid]['fi'][$fiid]['name'] = $fi; 
    $rows[$uid]['fi'][$fiid]['acct'][$acctID]['name'] = $row['AccountCustomName']; 

} 

Но тогда вы вновь массив и удалить все ключи с помощью array_values:

foreach ($rows as $uid => $data) 
{ 
    foreach ($data['fi'] as $fiid => $fi) 
    { 
     $rows[$uid]['fi'][$fiid]['acct'] = array_values($fi['acct']); 
    } 
    $rows[$uid]['fi'] = array_values($rows[$uid]['fi']); 
} 
// Here you format the outer array: 
$rows = array(array('users' => array_values($rows))); 

Что дает результат:

[ 
    { 
     "users": [ 
      { 
       "name": "Someones Name", 
       "uid": "1", 
       "fi": [ 
        { 
         "name": "Testes", 
         "acct": [ 
          { 
           "name": "Brothers" 
          }, 
          { 
           "name": "Brothers" 
          }, 
          { 
           "name": "Brothers" 
          }, 
          { 
           "name": "Brothers" 
          }, 
          { 
           "name": "Brothers" 
          } 
         ] 
        } 
       ] 
      }, 
      { 
       "name": "Someones Name", 
       "uid": "2", 
       "fi": [ 
        { 
         "name": "Testes", 
         "acct": [ 
          { 
           "name": "Brothers" 
          }, 
          { 
           "name": "Brothers" 
          } 
         ] 
        } 
       ] 
      } 
     ] 
    } 
] 
+0

не позволяет нескольким пользователям? – user2762149

+0

Что вы подразумеваете под «несколькими пользователями»? Таким образом, у него будет «пользовательский» ключ, значение которого представляет собой массив пользователей, например пример, который вы указали. –

+0

У меня уже есть полный рабочий выход с уникальными ключами (он находится в исходном сообщении). Я хочу знать, как иметь структуру данных без уникальных ключей, префиксных вложенных arays – user2762149

Смежные вопросы