-1

我有以下问题:

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

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

大批
(
    [tQVcIqz] => 数组
        (
            [id] => tQVcIqz
            [数据] => 数组
                (
                    [orderId] => tQVcIqz
                    [createdOn] => 2013-09-30 01:44:46
                    [状态] => nije placeno
                    [总计] => 2631.00
                )

            [item_data] => 数组
                (
                    [0] => 数组
                        (
                            [名称] => 项目 1 - 1
                            [代码] => ITEM1-123
                            [数量] => 1
                            [价格] => 12
                        )

                    [1] => 数组
                        (
                            [名称] => 项目 2 -2
                            [代码] => ITEM2-123
                            [数量] => 2
                            [价格] => 123
                        )

                    [2] => 数组
                        (
                            [名称] => 项目 3 - 3
                            [代码] => ITEM3-123
                            [数量] => 3
                            [价格] => 12
                        )

                    [3] => 数组
                        (
                            [名称] => 项目 4 - 4
                            [代码] => ITEM4-4
                            [数量] => 4
                            [价格] => 123
                        )

                    [4] => 数组
                        (
                            [名称] => 项目 5 - 5
                            [代码] => ITEM5-123
                            [数量] => 5
                            [价格] => 123
                        )

                )

        )

)

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

item1 item2 规则
 1 2 1
 1 3 0
 1 4 1
 1 5 1
 4 5 0

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

并且项目的 ids 从 1 开始,只是数组中的索引从 0 开始......

4

1 回答 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 小时写下来,只需要深思熟虑......谢谢大家......如果问题不合适,很抱歉......对于投票否决,精英混蛋做到了......

于 2013-10-02T08:40:15.830 回答