需求:
将不同属性下的不同规格,排列组合为序列值。比如:
属性1:颜色,规格:白色,黄色
属性2:尺寸,规格:XL,XXL
格式化后组合成:
1、白色+XL
2、白色+XXL
3、黄色+XL
4、黄色+XXL
声明:本文非原创,函数具体来源已不详。如有侵权,请告知!
/**
* 格式化属性
* @param $arr
* @return array
*/
function attrFormat($arr){
$data = [];
$res = [];
if(count($arr) > 1){
for ($i=0; $i < count($arr)-1; $i++) {
if($i == 0) $data = $arr[$i]['attr_value'];
//替代变量1
$rep1 = [];
foreach ($data as $v) {
foreach ($arr[$i+1]['attr_value'] as $g) {
//替代变量2
$rep2 = ($i!=0?'':$arr[$i]['attr_name']."_").$v."-".$arr[$i+1]['attr_name']."_".$g;
$tmp[] = $rep2;
if($i==count($arr)-2){
foreach (explode('-', $rep2) as $k => $h) {
//替代变量3
$rep3 = explode('_', $h);
//替代变量4
$rep4['attr_value'][$rep3[0]] = isset($rep3[1]) ? $rep3[1] : '';
}
$res[] = $rep4;
}
}
}
$data = isset($tmp) ? $tmp : [];
}
}else{
$dataArr = [];
foreach ($arr as $k=>$v){
foreach ($v['attr_value'] as $kk=>$vv){
$dataArr[$kk] = $v['attr_name'].'_'.$vv;
$res[$kk]['attr_value'][$v['attr_name']] = $vv;
}
}
$data[] = implode('-',$dataArr);
}
return [$data,$res];
}