通过特定规则 (php) 查找给定集合(数组)的子集


Finding sub set of given set (array) by certain rule (php)

>我有以下问题:

我有项目列表(数组(,每个项目都属于类别。我有规则说 2 个类别中的哪一个可以放在一起。我有方法get_rule_by_item(itemId1,itemId2)如果给定项目的类别可以组合在一起,则返回 true,如果不能分组,则返回 false。

所以我需要编写 PHP 代码来按上述规则将项目数组分组到最匹配的组中。

数组(    [tQVcIqz] => 数组        (            [id] => tQVcIqz            [数据] => 数组                (                    [orderId] => tQVcIqz                    [创建时间] => 2013-09-30 01:44:46                    [状态] => 尼耶普拉斯诺                    [总计] => 2631.00                )            [item_data] => 数组                (                    [0] => 数组                        (                            [名称] => 项目 1 - 1                            [代码] => 项目1-123                            [数量] => 1                            [价格] => 12                        )                    [1] => 数组                        (                            [名称] => 项目 2 -2                            [代码] => 项目2-123                            [数量] => 2                            [价格] => 123                        )                    [2] => 数组                        (                            [名称] => 项目 3 - 3                            [代码] => 项目3-123                            [数量] => 3                            [价格] => 12                        )                    [3] => 数组                        (                            [名称] => 项目 4 - 4                            [代码] => 项目4-4                            [数量] => 4                            [价格] => 123                        )                    [4] => 数组                        (                            [名称] => 项目 5 - 5                            [代码] => 项目5-123                            [数量] => 5                            [价格] => 123                        )                )        ))

这是输入数组...项目数据是需要拆分为不同子集的数组...例如,这里的规则集是这样的:

项目1 项目2 规则 1      2     1 1      3     0 1      4     1 1      5     1 4      5     0

其中规则是 1 - 如果他们可以一起去,0 如果他们不能......

而项目的 id 从 1 开始,只是数组中的索引从 0 开始......

function group_ok($code, $group) {
    if (!is_array($group)) return TRUE;
    foreach($group as $item){
        if ($this->get_rules_items($code, $item) === FALSE) return FALSE;}
    return TRUE;
}
function remove($arr,$val){
    if(($key = array_search($val, $arr)) !== false) {
        unset($arr[$key]);
    }
    return $arr;
}

function get_user_orders(){
    $userId = $this->tank_auth->get_user_id();
    $res = $this->shop->get_orders_by_user($userId);
    foreach($res as $key => $val){
        $it = array();
        foreach($val['item_data'] as $items) $it[] = $items['id'];
    }
    $k=0;
    $group = array();
    while(sizeof($it)>0){
        foreach($it as $item){
            if($this->group_ok($item,$group[$k])){
                $group[$k][] = $item;
                $it = $this->remove($it,$item);
            }
        }
        $k++;
    }

假设$res像我在问题中发布的那样获得数组 ->这就是解决方案。在我的问题后 2 小时写下来,只需要思考一下......谢谢大家..对不起,如果问题不合适...为了投票失败,精英混蛋做到了......