2017-05-26 110 views
1

我試圖根據以下陣列的匹配字段 「employerPayeReference」組合多個JSON陣列

陣列1下面的陣列組合:

{ 
    "employments": [ 
    { 
     "employerPayeReference": "123/AB456", 
     "payFromEmployment": 100.00 
    }, 
    { 
     "employerPayeReference": "456/AB456", 
     "payFromEmployment": 100.00 
    } 
] 
} 

陣列2:

{ 
    "employments": [ 
    { 
     "employerPayeReference": "123/AB456", 
     "taxTakenOffPay": 10.00 
    }, 
    { 
     "employerPayeReference": "456/AB456", 
     "taxTakenOffPay": 15.00 
    } 
    ] 
} 

我該如何到達一個看起來像這樣的陣列

{ 
    "employments": [ 
    { 
     "employerPayeReference": "123/AB456", 
     "payFromEmployment": 100.00 
     "taxTakenOffPay": 10.00 
    }, 
    { 
     "employerPayeReference": "456/AB456", 
     "payFromEmployment": 100.00 
     "taxTakenOffPay": 15.00 
    } 
    ] 
} 

(即)它基於employerPayeReference匹配進行組合。任何幫助讚賞

+0

那你試試,爲什麼它不工作? – Evert

+0

我在每個數組上重複這個循環,但它依賴於payeref在每個數組中的順序相同,但並非總是如此。 foreach($ input as $ parent){ foreach($ parent as $ values){ echo「
」; echo $ values [employerPayeReference]; echo $ values [employerName]; } } – user3163357

回答

3

您可以使用array_replace_recursive來實現結果。但是,既然它適用於數組,你需要使用json_decode將你的json轉換爲數組,然後使用json_encode進行編碼以獲得期望的結果。

$arr1 = '{ 
    "employments": [ 
    { 
     "employerPayeReference": "123/AB456", 
     "payFromEmployment": 100.00 
    }, 
    { 
     "employerPayeReference": "456/AB456", 
     "payFromEmployment": 100.00 
    } 
] 
}'; 

$arr2 = '{ 
    "employments": [ 
    { 
     "employerPayeReference": "123/AB456", 
     "taxTakenOffPay": 10.00 
    }, 
    { 
     "employerPayeReference": "456/AB456", 
     "taxTakenOffPay": 15.00 
    } 
    ] 
}'; 

$arr1 = json_decode($arr1, true); 
$arr2 = json_decode($arr2, true); 

$finalArr = array_replace_recursive($arr1, $arr2); 

echo json_encode($finalArr); 

一個內膽:

echo json_encode(array_replace_recursive(json_decode($arr1, true), json_decode($arr2, true))); 

有一個類似的方法使用數組處理從另一個SO answer

+0

謝謝你做得太多!正是我在找什麼! – user3163357