本文實例講述了PHP使用自定義方法實現數組合并。分享給大家供大家參考,具體如下:
在PHP中提供了強大的數組功能,對于數組的合并也提供了兩個方法:array_merge 和 array_merge_recursive
但對于我們千變萬化的業務來說這些內置的方法并不完全能滿足我們的要求
如我現在就遇到了數組合并這方面的問題,要求是這樣的:
有兩個二維數組,這兩個數組大部分的健名是相同的,但有些健名可能并不存在于另一個數組中,現在需要我做的是將第二個數組中所有健值復制到第一個數組中(條件是:兩個數組某個健名的值是相同的情況下)
顯然內置的兩個方法都不能滿足要求(兩個方法都只是將第二個數組中的健值復制到第一個對應的健上)
1
2
3
4
|
$ar1 = array ( "color" => array ( "favorite" => "red" , "name" => "test" )); $ar2 = array ( "color" => array ( "favorite" => "green" , "code" => "code" )); print_r ( array_merge ( $ar1 , $ar2 )); print_r( array_merge_recursive ( $ar1 , $ar2 )); |
可以看到array_merge只是將每個第二個數組的值復制到第一個數組上而已,顯然數組一favorite.name被數組二code給覆蓋了,而array_merge_recursive不會覆蓋掉相同的健名但一旦兩個數組健名相同則它會創建一個新數組并將兩個數組中值添加到新數組中
以下是我自定義的實現方法:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
|
/** * @Author: HTL * @Description: 根據指定的健名將$ar2中的所有健值復制到$ar1對應的健值中 * @Return:$ar1 */ function array_more_merge( $ar1 , $ar2 , $key_name ){ if ( ! $ar1 || ! is_array ( $ar1 ) || count ( $ar1 )<=0 || ! $ar2 || ! is_array ( $ar2 ) || count ( $ar2 )<=0 || ! $key_name || strlen ( $key_name )<=0) { return $ar1 ; } /*不能使用for進行循環,因為如果數組中的索引不是連續的則使用for可能無法正確的完成循環 如 $a = Array( 1 => Array("id" => 1 ) ,8 => Array("id" => 2 ) ,4 => Array("id" => 4 ) ); 該數組數為3所以只能找到[1],而[8][4]在循環中不會進行處理,因為$i <=count($a)不成立<br> */ for ( $i =0; $i <= count ( $a ) ; $i ++) { print_r( $a [ $i ]); } foreach ( $ar1 as $i => $items ) { foreach ( $ar2 as $key => $item ) { if ( $ar2 [ $key ][ $key_name ]== $ar1 [ $i ][ $key_name ]){ $keys = array_keys ( $ar2 [ $key ]); foreach ( $keys as $name ) { $ar1 [ $i ][ $name ] = $ar2 [ $key ][ $name ]; } } } } return $ar1 ; } $ar1 = '{"1":{"cost":"1","id":"1","total_price":"5"},"2":{"cost":"2","id":"2","total_price":"10"},"4":{"cost":"4","id":"4","total_price":"20"}}' ; $ar1 = json_decode( $ar1 ,true); $ar2 = '{"1":{"cost":"1","id":"1","total_price":"5"},"2":{"cost":"20","id":"2","total_price":"100"},"4":{"cost":"40","id":"4","total_price":"200"}}' ; $ar2 = json_decode( $ar2 ,true); echo "array_merge_recursive:" ; print_r( array_merge_recursive ( $ar1 , $ar2 )); echo "array_merge:" ; print_r( array_merge ( $ar1 , $ar2 )); echo "array_more_merge:" ; print_r( $this ->array_more_merge( $ar1 , $ar2 , "id" )); die (); |
運行結果如下圖所示:
希望本文所述對大家PHP程序設計有所幫助。