>我有以下问题:
我有项目列表(数组(,每个项目都属于类别。我有规则说 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 小时写下来,只需要思考一下......谢谢大家..对不起,如果问题不合适...为了投票失败,精英混蛋做到了......