如何用PHP合并两个数组并计算值
我正在寻找一个简单的解决方案,创建一个小函数来合并两个值为concat的数组(我正在使用它来创建html标记属性): 结果是:如何用PHP合并两个数组并计算值,php,arrays,Php,Arrays,我正在寻找一个简单的解决方案,创建一个小函数来合并两个值为concat的数组(我正在使用它来创建html标记属性): 结果是: $res["class"] = "red green"; $res["style"] = "display: block"; 还有一个选择: 如果$new不是一个数组,只需使用$default[“class”](如果存在),另一面:如果$default是一个简单的字符串,则转换为数组:$default[“class”]=$default 我创建了一个函数,但希望使用更
$res["class"] = "red green";
$res["style"] = "display: block";
还有一个选择:
如果$new
不是一个数组,只需使用$default[“class”]
(如果存在),另一面:如果$default
是一个简单的字符串,则转换为数组:$default[“class”]=$default
我创建了一个函数,但希望使用更简单、更短的方法:
function attrMerge( $default, $new="" ){
$res = array();
if(!is_array($default)) {
$res["class"] = $default;
}
else {
$res = $default;
}
if( $new !== "" ){
if(!is_array($new)) {
if(isset($res["class"])){
$res["class"].= " ".$new;
}
}
else {
foreach($new as $key=>$value) {
if( isset($res[$key]) ) {
$res[$key].= " ".$value;
}
else {
$res[$key] = $value;
}
}
}
}
return $res;
}
$a = attrMerge("red", array("class"=>"green", "style"=>"display: block;"));
我相信有一种方式适合你的需要,希望它能像你所期望的那样适应性强、效率高
$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;
}
我想这就是你需要的功能。我已将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;
}
谢谢但是当数组是函数的一部分时,这个函数就起作用了。有一个选项:这些变量是简单的字符串而不是数组。我不想每次都把它们放到数组中,有一个if语句检查它是否是数组,否则它将它用作字符串并将其添加到“class”中。正如您的函数所做的那样。另外,我添加了一个数组($attrs),因此您可以选择要添加到的内容。例如,不会添加/连接显示。仅类,因为类在$attrs中。请检查此项:
$arrayFinal=arrayMerge(“class3”,$array2)代码>这种情况下的输出是什么?:)谢谢您的函数在使用class属性时工作正常,但清除了$default[“style”]
,只保留了$new[“style”]
值。我添加了更正。我不知道你可以像类一样将样式作为$default值传递抱歉,我最后感到困惑:)这个函数对我来说非常有用。谢谢!:)
/**
* 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;
}
$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);