PHP:合并数组的问题

问题描述 投票:0回答:1

ok我有这个功能(我得到了这个Question的答案),该功能合并了类似的数组:

函数

function readArray( $arr, $k, $default = 0 ) {
    return isset( $arr[$k] ) ? $arr[$k] : $default ;
}

function merge( $arr1, $arr2 ) {
    $result = array() ;
    foreach( $arr1 as $k => $v ) {
        if( is_numeric( $v ) ) {
            $result[$k] = (int)$v + (int) readArray( $arr2, $k ) ;
        } else {
            $result[$k] = merge( $v, readArray($arr2, $k, array()) ) ;
        }
    }
    return $result ;
}

usage

$basketA = array( "fruit" => array(), "drink" => array() ) ;
$basketA['fruit']['apple'] = 1;
$basketA['fruit']['orange'] = 2;
$basketA['fruit']['banana'] = 3;
$basketA['drink']['soda'] = 4;
$basketA['drink']['milk'] = 5;

$basketB = array( "fruit" => array(), "drink" => array() ) ;
$basketB['fruit']['apple'] = 2;
$basketB['fruit']['orange'] = 2;
$basketB['fruit']['banana'] = 2;
$basketB['drink']['soda'] = 2;
$basketB['drink']['milk'] = 2;

$basketC = merge( $basketA, $basketB ) ;
print_r( $basketC ) ;

输出

Array
(
    [fruit] => Array
        (
            [apple] => 3
            [orange] => 4
            [banana] => 5
        )

    [drink] => Array
        (
            [soda] => 6
            [milk] => 7
        )

)

这与1个缺陷一起起作用,我无法弄清楚如何修复: 如果$ arr1缺少$ arr2所具有的东西,它应该只使用$ arr2的值,而是将其省略在一起:

示例

$basketA = array( "fruit" => array(), "drink" => array() ) ;
$basketA['fruit']['apple'] = 1;
$basketA['fruit']['orange'] = 2;
$basketA['fruit']['banana'] = 3;
$basketA['drink']['milk'] = 5;

$basketB = array( "fruit" => array(), "drink" => array() ) ;
$basketB['fruit']['apple'] = 2;
$basketB['fruit']['orange'] = 2;
$basketB['fruit']['banana'] = 2;
$basketB['drink']['soda'] = 2;
$basketB['drink']['milk'] = 2;

$basketC = merge( $basketA, $basketB ) ;
print_r( $basketC ) ;

输出

Array
(
    [fruit] => Array
        (
            [apple] => 3
            [orange] => 4
            [banana] => 5
        )

    [drink] => Array
        (
            [milk] => 7
        )

)
notice [苏打]不在新数组中,因为第一个数组没有它。

我怎么可以解决此问题? thanks !!!

快速修复,将

merge()
php arrays merge php4
1个回答
2
投票

function merge( $arr1, $arr2 ) { $result = array() ; foreach( $arr1 as $k => $v ) { if( is_numeric( $v ) ) { $result[$k] = (int)$v + (int) readArray( $arr2, $k ) ; } else { $result[$k] = merge( $v, readArray($arr2, $k, array()) ) ; } } foreach( $arr2 as $k => $v ) { if( is_numeric( $v ) ) { $result[$k] = (int)$v + (int) readArray( $arr1, $k ) ; } else { $result[$k] = merge( $v, readArray($arr1, $k, array()) ) ; } } return $result ; }

输出:

Array
(
    [fruit] => Array
        (
            [apple] => 3
            [orange] => 4
            [banana] => 5
        )

    [drink] => Array
        (
            [soda] => 2
            [milk] => 7
        )
)

也值得注意的是,单独的工作几乎相同:

array_merge_recursive()

输出:
$basketC = array_merge_recursive($basketA, $basketB);

因此,如果您想知道

Array ( [fruit] => Array ( [apple] => Array ( [0] => 1 [1] => 2 ) [orange] => Array ( [0] => 2 [1] => 2 ) [banana] => Array ( [0] => 3 [1] => 2 ) ) [drink] => Array ( [milk] => Array ( [0] => 5 [1] => 2 ) [soda] => 2 ) )

中有多少橙色,您只需要做:

$basketC

这种方式您无需使用任何黑客,缓慢且未经证实的自定义功能。
    
	

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.