求助!类似于笛卡尔乘积的数组处理 商品属性组合

ligaoyuan00 2018-01-25 02:25:03
如图 把第一个数组里的数据转换成第二个数组里那样
...全文
355 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
tq17094514 2018-03-13
  • 打赏
  • 举报
回复
function dkr($array, $res = '', &$result) { $arrs = array_shift($array); if (!empty($arrs)) { foreach ($arrs as $arr) { $next = ''; $next = $res . $arr['name']; // 递归. dkr($array, $next, $result); } } else { array_push($result, $res); } } $result = array(); dkr($array, '', $result);
ligaoyuan00 2018-01-25
  • 打赏
  • 举报
回复
谢谢两位大神 我再研究研究
木乄木 2018-01-25
  • 打赏
  • 举报
回复
引用 2 楼 ligaoyuan00 的回复:
但是我从数据库取出来是带有字段名的 要带上name 这种下标的
$arr1 = array();  
    $result = array_column(array_shift($arr),'name');
    while($arr2 = array_column(array_shift($arr),'name')){  
    $arr1 = $result;  
        $result = array();  
        foreach($arr1 as $v){  
            foreach($arr2 as $v2){  
                $result[] = $v.$v2;  
            }  
        }  
    }  

Array
(
    [0] => A1111aa
    [1] => A1111bb
    [2] => A2222aa
    [3] => A2222bb
    [4] => A3333aa
    [5] => A3333bb
    [6] => B1111aa
    [7] => B1111bb
    [8] => B2222aa
    [9] => B2222bb
    [10] => B3333aa
    [11] => B3333bb
)
木乄木 2018-01-25
  • 打赏
  • 举报
回复
引用 2 楼 ligaoyuan00 的回复:
但是我从数据库取出来是带有字段名的 要带上name 这种下标的
如果你需要最后的结果也是带有name的 那就加上
foreach ($result as $value) {
        $res[]['name'] = $value;
    }
res就是最后的结果 其中arr 是你得那个数组
xuzuning 2018-01-25
  • 打赏
  • 举报
回复
代码都给你了,你自己改
ligaoyuan00 2018-01-25
  • 打赏
  • 举报
回复
但是我从数据库取出来是带有字段名的 要带上name 这种下标的
xuzuning 2018-01-25
  • 打赏
  • 举报
回复
你这就是笛卡尔积
$a = array(
array('黑色', '白色'),
array('大号', '中号', '小号'),
array('5kg', '10kg')
);

print_r(Descartes($a));

Array
(
[0] => Array
(
[0] => 黑色
[1] => 大号
[2] => 5kg
)

[1] => Array
(
[0] => 黑色
[1] => 大号
[2] => 10kg
)

[2] => Array
(
[0] => 黑色
[1] => 中号
[2] => 5kg
)

[3] => Array
(
[0] => 黑色
[1] => 中号
[2] => 10kg
)

[4] => Array
(
[0] => 黑色
[1] => 小号
[2] => 5kg
)

[5] => Array
(
[0] => 黑色
[1] => 小号
[2] => 10kg
)

[6] => Array
(
[0] => 白色
[1] => 大号
[2] => 5kg
)

[7] => Array
(
[0] => 白色
[1] => 大号
[2] => 10kg
)

[8] => Array
(
[0] => 白色
[1] => 中号
[2] => 5kg
)

[9] => Array
(
[0] => 白色
[1] => 中号
[2] => 10kg
)

[10] => Array
(
[0] => 白色
[1] => 小号
[2] => 5kg
)

[11] => Array
(
[0] => 白色
[1] => 小号
[2] => 10kg
)

)
function Descartes($d) {
if(func_num_args() > 1) $d = func_get_args();
$r = array_pop($d);
while($d) {
$t = array();
$s = array_pop($d);
if(! is_array($s)) $s = array($s);
foreach($s as $x) {
foreach($r as $y) $t[] = array_merge(array($x), is_array($y) ? $y : array($y));
}
$r = $t;
}
return $r;
}

21,886

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧