日期:2014-05-17 浏览次数:20773 次
<?php
$strr =array("第一场301_菲尼克斯水星_芝加哥天空_主胜_2.10","第一场301_菲尼克斯水星_芝加哥天空_客胜_12.10","第二场301_菲尼克斯水星_芝加哥天空_主胜_2.10","第二场301_菲尼克斯水星_芝加哥天空_客胜_12.10","第三场302_明尼苏达山猫_印第安纳狂热_主胜_1.20","第三场302_明尼苏达山猫_印第安纳狂热_客胜_2.92");
function B($list) {
$midList = array();
foreach($list as $line) {
preg_match_all('/((.*?_.*?_.*?)_(.*))/', $line, $match, PREG_SET_ORDER);
$match = $match[0];
if(!isset($midList[$match[2]])) {
$midList[$match[2]] = array();
}
$midList[$match[2]][] = $match[1];
}
$newList = array();
// var_dump($midList);exit;
$i = 0;
foreach($midList as $match => $oddses) {
// $newList[] = array();
$newList = _combinate($newList, $oddses);
}
return $newList;
}
function _combinate($arr, $newItems) {
$newArr = array();
if(empty($arr)) {
foreach($newItems as $item) {
$newArr[] = array($item);
}
return $newArr;
}
foreach($newItems as $newItem) {
foreach($arr as $oldItems) {
$oldItems[] = $newItem;
$newArr[] = $oldItems;
}
}
return $newArr;
}
echo '<pre>';
print_r(B($strr));
exit;
------解决方案--------------------
那只是你的数据给的不太适合,排一下序就可以了
我并不知道你想干什么!只是根据你的代码来猜测你的思路。要是离开你的整体构思,就没有意义了
$str_2=array("a_a_a_1","a_a_a_2","b_b_b_1","b_b_b_2","c_c_c_1","a_a_a_3");
//------------------------
$back = A($str_2);
print_r($back);
//这是分割数组的方法-----
function A($str){
sort($str); //排序,把相似的摆在一起
//定义一个二维数组来存放根据逻辑分割出来的array
$newstr = array();
for($i=0;$i<count($str)-1;$i++){
$e1 = explode("_",$str[$i]);
$e2 = explode("_",$str[$i+1]);
if($e1[0].$e1[1].$e1[2]==$e2[0].$e2[1].$e2[2]){
//先分割成(两个)数组再在递归调用A($str)
$t = $str;
array_splice($str,$i+1, 1);
$newstr = array_merge($newstr, A($str));
$str = $t;
array_splice($str,$i, 1);
$newstr = array_merge($newstr, A($str));
}
}
if(! $newstr) array_push($newstr,$str);
return $newstr;
}