2015-04-16 43 views
0

我有一些數據庫記錄,並且我獲取了所有記錄。數組返回如下代碼如何解碼json字符串並將其添加到PHP中的數組中

array (size=10) 
    0 => 
    array (size=5) 
     'id' => string '1' (length=1) 
     'type' => string 'group' (length=5) 
     'members' => null 
     'parents' => string '0' (length=1) 
     'level' => string '1' (length=1) 
    1 => 
    array (size=5) 
     'id' => string '2' (length=1) 
     'type' => string 'group' (length=5) 
     'members' => null 
     'parents' => string '0' (length=1) 
     'level' => string '1' (length=1) 
    2 => 
    array (size=5) 
     'id' => string '3' (length=1) 
     'type' => string 'team' (length=4) 
     'members' => string '["3","5","6"]' (length=13) 
     'parents' => string '1' (length=1) 
     'level' => string '2' (length=1) 
    3 => 
    array (size=5) 
     'id' => string '4' (length=1) 
     'type' => string 'team' (length=4) 
     'members' => string '["1"]' (length=5) 
     'parents' => string '1' (length=1) 
     'level' => string '2' (length=1) 
    4 => 
    array (size=5) 
     'id' => string '5' (length=1) 
     'type' => string 'group' (length=5) 
     'members' => null 
     'parents' => string '1' (length=1) 
     'level' => string '2' (length=1) 
    5 => 
    array (size=5) 
     'id' => string '8' (length=1) 
     'type' => string 'team' (length=4) 
     'members' => string '["4"]' (length=5) 
     'parents' => string '5' (length=1) 
     'level' => string '3' (length=1) 
    6 => 
    array (size=5) 
     'id' => string '9' (length=1) 
     'type' => string 'team' (length=4) 
     'members' => string '["2"]' (length=5) 
     'parents' => string '5' (length=1) 
     'level' => string '3' (length=1) 
    7 => 
    array (size=5) 
     'id' => string '10' (length=2) 
     'type' => string 'team' (length=4) 
     'members' => null 
     'parents' => string '5' (length=1) 
     'level' => string '3' (length=1) 
    8 => 
    array (size=5) 
     'id' => string '11' (length=2) 
     'type' => string 'team' (length=4) 
     'members' => null 
     'parents' => string '5' (length=1) 
     'level' => string '3' (length=1) 
    9 => 
    array (size=5) 
     'id' => string '12' (length=2) 
     'type' => string 'group' (length=5) 
     'members' => null 
     'parents' => string '1' (length=1) 
     'level' => string '2' (length=1) 

成員字段已被編碼爲json字符串。我想建立與格式的數組下面的代碼

array('1'=>array(1,2,3,4,5,6), 
     '2'=>array(), 
     '3'=>array(3,5,6), 
     '4'=>array(1), 
     '5'=>array(2,4), 
     '8'=>array(4), 
     '9'=>array(2)) 

記錄的ID將是關鍵陣列和成員已經解碼將成爲價值。我寫了一個函數處理從數據庫返回的數組,但結果不如我的意圖。這是我的代碼

$results = mysql_query('select id,type,members,parents,level from team'); 
$array = array(); 
recursiveDate($results,0,$array); 

function recursiveData($sourceArr,$parents = 0, &$newMenu){ 
     if(count($sourceArr)>0){ 
      foreach ($sourceArr as $key => $value){ 
       if($value['parents'] == $parents){ 
        if(isset($newMenu[$value['id']])){ 
         $newMenu[$value['id']] = array(); 
        } 
        $newMenu[$value['id']] = $value['members']?json_decode($value['members']):array(); 
        if(isset($newMenu[$parents])){ 
         $newMenu[$parents] = array_merge($newMenu[$value['id']],$newMenu[$parents]); 
        } 


        $newParents = $value['id']; 
        unset($sourceArr[$key]); 
        $this->recursiveData($sourceArr,$newParents, $newMenu); 
       } 
      } 
     } 
    } 

這是處理後

array (size=10) 
    1 => 
    array (size=4) 
     0 => string '1' (length=1) 
     1 => string '3' (length=1) 
     2 => string '5' (length=1) 
     3 => string '6' (length=1) 
    3 => 
    array (size=3) 
     0 => string '3' (length=1) 
     1 => string '5' (length=1) 
     2 => string '6' (length=1) 
    4 => 
    array (size=1) 
     0 => string '1' (length=1) 
    5 => 
    array (size=2) 
     0 => string '2' (length=1) 
     1 => string '4' (length=1) 
    8 => 
    array (size=1) 
     0 => string '4' (length=1) 
    9 => 
    array (size=1) 
     0 => string '2' (length=1) 
    10 => 
    array (size=0) 
     empty 
    11 => 
    array (size=0) 
     empty 
    12 => 
    array (size=0) 
     empty 
    2 => 
    array (size=0) 
     empty 

請幫我建立一個數組

+0

哪裏每個陣列從未來的值?我在猜測會員? – Bankzilla

+0

是的,成員字段數組已被編碼爲json字符串,我解碼成員字段並將其設置爲值。 – phongphu10

回答

0

我很快就寫了這個所以不知道這是否就是你要找正是數組因爲,看起來像你過於複雜,但巨大的。我保留了原來的結果結構,但如果您願意,可以輕鬆覆蓋它。

function modifyData($data = array()) { 
    foreach($data as &$entry) { 
     if(!empty($entry['members'])) { 
      $entry['members'] = json_decode($entry['members'], true); 
     } else { 
      $entry['members'] = array(); 
     } 
    } 
    return $data; 
} 

我測試這與

$data = array(
    array(
     'id' =>'1', 
     'type' =>'group', 
     'members' => null, 
     'parents' =>'0', 
     'level' =>'1' 
    ), 
    array(
     'id' =>'1', 
     'type' =>'group', 
     'members' => '["3","5","6"]', 
     'parents' =>'0', 
     'level' =>'1' 
    ), 
    array(
     'id' =>'1', 
     'type' =>'group', 
     'members' => '["3"]', 
     'parents' =>'0', 
     'level' =>'1' 
    ) 
); 

並且輸出是

array (size=3) 
    0 => 
    array (size=5) 
     'id' => string '1' (length=1) 
     'type' => string 'group' (length=5) 
     'members' => 
     array (size=0) 
      empty 
     'parents' => string '0' (length=1) 
     'level' => string '1' (length=1) 
    1 => 
    array (size=5) 
     'id' => string '1' (length=1) 
     'type' => string 'group' (length=5) 
     'members' => 
     array (size=3) 
      0 => string '3' (length=1) 
      1 => string '5' (length=1) 
      2 => string '6' (length=1) 
     'parents' => string '0' (length=1) 
     'level' => string '1' (length=1) 
    2 => 
    array (size=5) 
     'id' => string '1' (length=1) 
     'type' => string 'group' (length=5) 
     'members' => 
     array (size=1) 
      0 => string '3' (length=1) 
     'parents' => string '0' (length=1) 
     'level' => string '1' (length=1) 
+0

在我的表中,記錄有類型是組不會保存成員,只有記錄有類型是團隊會保存成員。我希望當我訪問記錄是組我可以得到屬於該組的所有成員,我訪問記錄是團隊我需要得到只有成員屬於該團隊。我希望帶鍵的數組是記錄的id,該數組將作爲示例數組('1'=> array(1,2,3,4,5,6), '2'=> array() (4), '3'=> array(3,5,6), '4'=> array(1), '5'=> array(2,4), '8'=> array(4) , '9'=> array(2)) – phongphu10

+0

對不起,但我不明白你的意思。 – Bankzilla

+0

表中的第一條記錄是根。當我得到子節點時,結果將是數組('id_of_record'=> decode_members)。我希望當我得到所有記錄時,根包含所有成員已解碼所有孩子的成員字段。謝謝你的幫助 – phongphu10

相關問題