如果为空,PHP合并数组

时间:2014-11-05 16:52:46

标签: php arrays array-merge

有没有一种很好的方法可以在PHP中合并两个数组。

我的$defaults - 数组包含默认值。如果$properties - 数组包含空字符串,我想使用$defaults - 数组中的值。

到目前为止我的代码如下:

    $defaults = array( 
        'src' => site_url() . '/facebook_share.png',
        'alt' => 'Facebook',
        'title' => 'Share',
        'misc' => '',
        );


    $properties = array( 
        'src' => '',
        'alt' => '',
        'title' => 'Facebook Share',
        'text' => 'FB Text', //further properties
        );

$arr = array_merge( $defaults, $properties);
var_dump($arr);

当前结果:

    $arr = array( 
        'src' => '',
        'alt' => '',
        'title' => 'Facebook Share',
        'text' => 'FB Text',
        'misc' => '',
        );

期望的结果:

    $arr = array( 
        'src' => site_url() . '/facebook_share.png',
        'alt' => 'Facebook',
        'title' => 'Facebook Share',
        'text' => 'FB Text',
        'misc' => '',
        );

希望有人可以提供帮助。

3 个答案:

答案 0 :(得分:3)

尝试:

$arr = array_merge($defaults, array_filter($properties));

请注意,array_filter会过滤掉空字符串''0nullfalse的元素。

答案 1 :(得分:3)

尝试使用此功能

/**
  * @param {array} the properties array. transmitted by referance 
  * @param {array} the default array
  */
function getTheBest(&$properties, $defaults) {
    $temp = $properties;
    foreach ($properties as $key => $value) {
        if(empty($properties[$key]) && array_key_exists($key, $defaults) && !empty($defaults[$key]) ) {
            $properties[$key] = $defaults[$key];
        }
    }
}

答案 2 :(得分:0)

这很好用:

 $arr = array_merge($defaults, array_filter($properties));