递归查询属性

图片描述

怎么循环出以下格式

array(
  'detali'=> 
        array('颜色'=>白色)
        array('包装'=>大)
        array('规则'=>1)
)
array(
  'detali'=> 
        array('颜色'=>白色)
        array('包装'=>小)
        array('规则'=>1)
)
array(
  'detali'=> 
        array('颜色'=>白色)
        array('包装'=>大)
        array('规则'=>2)
)
array(
  'detali'=> 
        array('颜色'=>白色)
        array('包装'=>小)
        array('规则'=>2)
)
array(
  'detali'=> 
        array('颜色'=>黑色)
        array('包装'=>大)
        array('规则'=>1)
)
array(
  'detali'=> 
        array('颜色'=>黑色)
        array('包装'=>小)
        array('规则'=>1)
)
array(
  'detali'=> 
        array('颜色'=>黑色)
        array('包装'=>大)
        array('规则'=>2)
)
array(
  'detali'=> 
        array('颜色'=>黑色)
        array('包装'=>小)
        array('规则'=>2)
)
阅读 1.7k
1 个回答

代码:

$arr = [
    ['value' => '颜色', 'detailValue' => '', 'attrHidden' => true, 'detail' => ['白色','黑色']],
    ['value' => '包装', 'detailValue' => '', 'attrHidden' => true, 'detail' => ['大','小']],
    ['value' => '规则', 'detailValue' => '', 'attrHidden' => true, 'detail' => ['1','2']]
];

function decare($arr){
    $data = [];
    $res = [];
    for ($i=0; $i < count($arr)-1; $i++) { 

        if($i == 0){
            $data = $arr[$i]['detail'];
        }
        //替代变量1
        $rep1 = [];

        foreach ($data as $v) {
            foreach ($arr[$i+1]['detail'] as $g) {
                //替代变量2
                $rep2 = ($i!=0?'':$arr[$i]['value']."_").$v."-".$arr[$i+1]['value']."_".$g;
                $tmp[] = $rep2;
                if($i==count($arr)-2){
                    foreach (explode('-', $rep2) as $k => $h) {
                        //替代变量3
                        $rep3 = explode('_', $h);
                        //替代变量4
                        $rep4['detail'][$rep3[0]] = $rep3[1];
                    }
                    $res[] = $rep4;
                }
            }
        }

        $data = $tmp;
    }
    return [$data,$res];
}
print_r(decare($arr)[1]);

结果:

clipboard.png

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题