如何合并两个数组并使用PHP连接值

时间:2016-02-28 21:51:52

标签: php arrays

我正在寻找一个简单的解决方案来创建一个小函数来合并两个数组和值concat(我用它来创建html标签属性):

$default["class"] = "red";

$new["class"] = "green";
$new["style"] = "display:block"

结果:

$res["class"] = "red green";
$res["style"] = "display: block";

还有一个选项: 如果$new不是数组,只需与$default["class"](如果存在)联合,另一方:如果$default是一个简单的字符串,则转换为数组:{{ 1}};

我创建了一个函数,但希望使用更简单,更简洁的方法:

$default["class"] = $default

3 个答案:

答案 0 :(得分:1)

我认为这是你需要的功能。我已经将css类和样式初始化为空,并且取决于你传入函数然后得到相关数组

/**
* This function returns an array of classes and styles
*
* @param $default
* @param $new
* @return array
*/
function attrMerge($default=null, $new=nul)
{
    $result = array();
    $result['class'] = "";
    $result['style'] = "";

    // add default class if exists
    if (!empty($default) && is_string($default)) {
        // $default is string
        $result['class'] = $default;
    }
    if (!empty($default)
        && is_array($default)
    ) {
        if (array_key_exists('class', $default)
            && !empty($default['class'])
        ) {
           // $default['class'] exists and it's not empty
           $result['class'] = $default['class'];
        }
        if (array_key_exists('style', $default)
            && !empty($default['style'])
        ) {
           // $default['style'] exists and it's not empty
           $result['style'] = $default['style'];
        }
    }

    // add additional classes OR styles
    if (!empty($new)) {
        if(!is_array($new)) {
            $result['class'] = empty($result['class'])
                ? $new
                : $result['class'] . " " . $new;
        } else {
            foreach ($new as $key => $value) {
                if (isset($result[$key])) {
                    $result[$key] = empty($result[$key])
                        ? $value
                        : $result[$key] . " " . $value;
                } else {
                    $result[$key] = $value;
                }
            }
        }
    }

    return $result;
}

答案 1 :(得分:0)

我认为一种适合您需求的方式,希望它具有您所期望的适应性和有效性。

$array1 = array(
'class' => 'class1',
'style' => 'display: none;'
);

$array2 = array(
    'class' => 'class2'
);

$arrayFinal = arrayMerge($array1, $array2);
var_dump($arrayFinal);

function arrayMerge($arr1, $arr2 = ''){
    // Array of attributes to be concatenated //
    $attrs = array('class');
    if(is_array($arr2)){
        foreach($attrs as $attr){
            if(isset($arr1[$attr]) && isset($arr2[$attr])){
            // Not using .= to allow for smart trim (meaning empty check etc isn't needed //
            $arr1[$attr] = trim($arr1[$attr] . ' ' . $arr2[$attr]);
            }
        }
    }else{
        $arr1['class'] = trim($arr1['class'] . ' ' . $arr2);
    }

    return $arr1;
}

答案 2 :(得分:0)

$def = ['class' => 'red'];
$new = ['class' => 'green', 'style' => 'style'];

function to_array($in) {
    return is_array($in) ? $in : ['class' => $in];
}

$def = to_array($def);
$new = to_array($new);

$res = $def;
array_walk($new, function ($val, $key) use (&$res) {
   $res[$key] = trim(@$res[$key] . ' ' . $val);
});

var_dump($res);