看到算法问题很有意思,这边用最笨方法解!

原文地址

  • 不保证是对的
<?php

$array = [1, 2, 3, 4, 5, 6, 7, 8];        // 要买的东西的数组

// 超市所拥有的商品
$lists = [
    'a' => [7, 8, 6, 2, 4],
    'b' => [7, 1, 2, 3],
    'c' => [4, 5, 6, 8],
    'd' => [6, 7, 8, 1],
    'e' => [3, 5, 8]
];


// 存储元素位置
$items = [];

// 购买的东西在超市位置
foreach ($array as $key => $value) {
    $it = [
        'value' => $value,
        'list' => [],
    ];
    foreach ($lists as $kk => $vv) {
        if (in_array($value, $vv)) {
            $it['list'][] = $kk;
        }
    }
    $items[] = $it;
}

/*
    每件商品追加
    比如 
    a 1
    b 1 2

    变成
    a-1 b-1
    a-1 b-2
*/ 
$find = [];
$i = 0;
$allCount = count($items);
foreach ($items as $ki => $vi) {
    $before = [];
    if ($allCount != $i) {
        $before = $find;
    }
    $find = [];
    if ($i == 0) {
        foreach ($vi['list'] as $kik => $viv) {
            $isss = $viv . '-' . $vi['value'];
            $find[] = $isss;
        }
    }
    if ($i == 1) {
        foreach ($vi['list'] as $kik => $viv) {
            $isss = $viv . '-' . $vi['value'];
            foreach ($before as $k1 => $v1) {
                $find[] = [$v1, $isss];
            }
        }
    }
    if ($i > 1) {
        foreach ($vi['list'] as $kik => $viv) {
            $isss = $viv . '-' . $vi['value'];
            foreach ($before as $k2 => $v2) {
                $kss = [$isss];
                foreach ($v2 as $k3 => $v3) {
                    $kss[] = $v3;
                }
                $find[] = $kss;
            }
        }
    }

    $i++;
}

// 数据分类导出
$ress = [];
foreach ($find as $kf => $vf) {
    $item = [];
    foreach ($vf as $k3 => $v3) {
        $ks3 = explode('-', $v3);
        $item[$ks3[0]][] = $ks3[1];
    }
    $ress[] = $item;
}

var_dump($ress);
本作品采用《CC 协议》,转载必须注明作者和本文链接
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
讨论数量: 1

不错,稍微看了,好像是对的。

2年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!