我有以下问题:
我有项目列表(数组),每个项目都属于类别。我有规则说两个类别中的哪一个可以组合在一起。我有方法get_rule_by_item(itemId1,itemId2)
,如果给定项目的类别可以组合在一起,则返回true,如果不能,则返回false。
因此,我需要编写PHP代码,通过提到的规则将项目数组分组到最佳匹配组中。
Array ( [tQVcIqz] => Array ( [id] => tQVcIqz [data] => Array ( [orderId] => tQVcIqz [createdOn] => 2013-09-30 01:44:46 [status] => nije placeno [total] => 2631.00 ) [item_data] => Array ( [0] => Array ( [name] => Item 1 - 1 [code] => ITEM1-123 [qty] => 1 [price] => 12 ) [1] => Array ( [name] => Item 2 -2 [code] => ITEM2-123 [qty] => 2 [price] => 123 ) [2] => Array ( [name] => Item 3 - 3 [code] => ITEM3-123 [qty] => 3 [price] => 12 ) [3] => Array ( [name] => Item 4 - 4 [code] => ITEM4-4 [qty] => 4 [price] => 123 ) [4] => Array ( [name] => Item 5 - 5 [code] => ITEM5-123 [qty] => 5 [price] => 123 ) ) ) )
这是输入数组...项数据是需要在不同子集中拆分的数组...例如,这里的规则集是这样的:
item1 item2 rule 1 2 1 1 3 0 1 4 1 1 5 1 4 5 0
其中规则是1 - 如果他们可以一起去0而他们不能......
项目的ID从1开始,只是数组中的索引从0开始......
答案 0 :(得分: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小时把它写下来,只需要考虑一下......感谢所有人......如果问题不合适就很抱歉......为了投票,精英主义的混蛋做到了......