$newarr=array();
for($i=0;$i<count($arr);$i++)
{
$newarr=array_merge($newarr,$arr[$i]);
}
$tmpAry=array_unique($newarr);
//$tmpAry = array_keys($newarr); $j=0;
foreach($tmpAry as $key=>$val){
$newKey = substr($val, 0, strpos($val, "@"));
$newStr = !empty($newAry) && array_key_exists($newKey, $newAry) ? $newAry[$newKey].",".substr($val,strpos($val, "@")+1, strlen($val)) : $val;
if(preg_match("/all/i", $newStr)){$newStr = $val;} $newStr = implode(",", array_unique(split(",", $newStr)));
//echo $j.">".$newStr."<br>";
$newAry[$newKey] = $newStr;
$j++;
}
$newAry = array_values($newAry);老是出现重复值
for($i=0;$i<count($arr);$i++)
{
$newarr=array_merge($newarr,$arr[$i]);
}
$tmpAry=array_unique($newarr);
//$tmpAry = array_keys($newarr); $j=0;
foreach($tmpAry as $key=>$val){
$newKey = substr($val, 0, strpos($val, "@"));
$newStr = !empty($newAry) && array_key_exists($newKey, $newAry) ? $newAry[$newKey].",".substr($val,strpos($val, "@")+1, strlen($val)) : $val;
if(preg_match("/all/i", $newStr)){$newStr = $val;} $newStr = implode(",", array_unique(split(",", $newStr)));
//echo $j.">".$newStr."<br>";
$newAry[$newKey] = $newStr;
$j++;
}
$newAry = array_values($newAry);老是出现重复值
{
$result=array_merge($result,$arr[$i]);
}
<?php
$arr = array
(
0 => array
(
'1@01,02',
'2@01,02',
'4@ALL',
'3@01',
'5@01,02,04',
), 1 => array
(
'1@01,02,03',
'2@01,02,04',
'3@ALL',
'4@01,02',
'111@01,05',
'5@03',
),
2 => array
(
'1@01,02,03',
'2@02,03,05',
'3@ALL',
'4@01,02,03',
'111@01,05',
'5@03',
), ); $result = array();
foreach($arr as $V)
{
foreach($V as $v)
{
list($KEY, $VALUE) = explode("@", $v);
if($result[$KEY]===false) continue;
$value = explode(",", $VALUE);
foreach($value as $t)
{
if($t == "ALL")
{
$result[$KEY] = false;
break;
}
elseif($result[$KEY]!==false) $result[$KEY][]=$t;
}
}
}foreach($result as $k=>$v) $result[$k]=$k."@".(is_array($v)?join(",", array_unique($v)):"ALL");
print_r($result);
?>结果:Array
(
[1] => 1@01,02,03
[2] => 2@01,02,04,03,05
[4] => 4@ALL
[3] => 3@ALL
[5] => 5@01,02,04,03
[111] => 111@01,05
)
$arr = array
(
0 => array(
'1@01,02',
'2@01,02',
'4@ALL',
'3@01',
'5@01,02,04',
), 1 => array(
'1@01,02,03',
'2@01,02,04',
'3@ALL',
'4@01,02',
'111@01,05',
'5@03',
),
2 => array(
'1@01,02,03',
'2@02,03,05',
'3@ALL',
'4@01,02,03',
'111@01,05',
'5@03',
),
);
$allList = array();
$result = array();function reExplode(&$item,$key,$seq){
$item = explode($seq,$item);
}
function reJoin(&$item,$key,$seq){
$list = array_unique(explode($seq,$item));
if (in_array('ALL', $list)){
$item = $key.'@ALL';
}else{
$item = $key.'@'.implode($seq,$list);
}
}
foreach($arr as $item){
array_walk($item, 'reExplode','@');
$allList = array_merge($allList, $item);
}foreach($allList as $item){
if(count($item) != 2){
continue ;
}
$result[$item[0]] .= $item[1].',';
}
array_walk($result, 'reJoin',',');
sort($result);
var_export($result);
?>
写的比较急,很乱~希望你看不懂。
容易理解一些了~但还是很烂。
<?php
$arr = array
(
0 => array(
'1@01,02',
'2@01,02',
'4@ALL',
'3@01',
'5@01,02,04',
), 1 => array(
'1@01,02,03',
'2@01,02,04',
'3@ALL',
'4@01,02',
'111@01,05',
'5@03',
),
2 => array(
'1@01,02,03',
'2@02,03,05',
'3@ALL',
'4@01,02,03',
'111@01,05',
'5@03',
),
);
$result = array();
foreach($arr as $items){
if(is_array($items)){
foreach($items as $item){
$item = explode('@', $item);
if(count($item) != 2){
continue ;
}
$result[$item[0]] .= $item[1].',';
}
}
}
function reJoin(&$item,$key,$seq){
$list = array_unique(explode($seq,$item));
if (in_array('ALL', $list)){
$item = $key.'@ALL';
}else{
$item = $key.'@'.join($seq,$list);
}
}
array_walk($result, 'reJoin',',');
sort($result);
var_export($result);
/**
* array (
* 0 => '111@01,05,',
* 1 => '1@01,02,03,',
* 2 => '2@01,02,04,03,05,',
* 3 => '3@ALL',
* 4 => '4@ALL',
* 5 => '5@01,02,04,03,',
* )
*/
?>