2012-11-01 164 views
0

数组怎样才能被分成几组相同的元素(连接字符)。 例如,我有这样的数组:PHP组重复数组中的元素

Array(
    [0] => 1 
    [1] => 1 
    [2] => 1 
    [3] => 2 
    [4] => 2 
    [5] => 1 
) 

,并希望将所有相同的号码只有一个元素,与拼接带来在一起,得到这样的:

Array(
    [0] => 111 
    [1] => 22 
    [2] => 1 
    ) 
+1

你尝试你自己做了吗? – Sergey

+0

是否要将所有相同的元素组合在一起或仅包含相邻的相同元素? – air4x

+0

为什么[2] => 1,我想知道?这里不是'1'与这些'1'相同吗? – raina77ow

回答

2

要组的所有相同的元件(不会只是串联工作相邻的相同元素)

$arr = array (1,1,1,2,2,1); 
$sum = array_count_values($arr); 
array_walk($sum, function(&$count, $value) { 
    $count = str_repeat($value, $count); 
}); 
print_r($sum); 

输出

阵列( [1] => 1111 [2] => 22)

或者为串联只是相邻的相同元件

$prev=null; 
$key=0; 
foreach ($arr as $value) { 
    if ($prev == $value){ 
    $res[$key] .= $value; 
    } else { 
    $key++; 
    $res[$key] = $value; 
    $prev=$value; 
    } 
} 
print_r($res); 

输出

Array( [1] => 111 [2] => 22 [3] => 1)

+0

非常感谢第二种解决方案。 – drake2300

0
$newarray = array_unique($oldarray); 
$count = array_count_values($oldarray); 
foreach($newarray as &$val){ 
$val = str_repeat($val,$count[$val]); 
} 

http://codepad.org/FUf0n8sz

+0

为什么您需要在此使用'array_unique'? – raina77ow

+0

@ raina77ow将数组减少为每个要重复的值的一次,循环需要运行更少的次数。 –

+0

呃。你担心效率,但是在循环中调用'array_count_values' - 当一个调用足够时? – raina77ow

0
<?php 
$i=0; 
foreach($Arrays as $key=>$val) { 
    if (!isset($array[$i])) 
     $array[$i]=$val; 
    else if (!isset($mem) || $val==$mem) 
     $array[$i]=10*$array[$i]+$mem; 
    else 
    $i++; 
    $mem=$val; 
} 
?> 
+0

这可能会解决当前的问题,但只适用于整数。 – 2012-11-01 10:42:32

+1

只需使用其他级联方法,如。=用于其他... –

0

这里有两个函数 1将返回

Array 
(
    [1] => Array 
     (
      [0] => 1 
      [1] => 1 
      [2] => 1 
      [3] => 1 
     ) 

    [2] => Array 
     (
      [0] => 2 
      [1] => 2 
     ) 

) 

作为输出和第二个将通过串联在一起返回

Array 
(
    [1] => 1111 
    [2] => 22 
) 

作为输出

$array = array(
    1,1,1,2,2,1 
); 

print_r(groupArray($array)); 

print_r(groupSame($array)); 


function groupArray($array){ 
    $temp = array(); 
    foreach($array as $value){ 
     if(!isset($temp[$value])){ 
      $temp[$value] = array(); 
     } 
     array_push($temp[$value],$value); 
    } 
    return $temp; 
} 

function groupSame($array){ 
    $temp = array(); 
    foreach($array as $value){ 
     if(!isset($temp[$value])){ 
      $temp[$value] = ""; 
     } 
     $temp[$value] .= $value; 
    } 
    return $temp; 
} 
0
$array = array(1,1,1,2,2,1); 
$start = ""; 
$new_array = array(); 
foreach($array as $v){ 
    $v = (string)$v; 
    if($start==$v){ 
     $count = count($new_array) - 1; 
     $val = $new_array[$count].$v; 
     $new_array[$count] = $val; 
    } else{ 
     $new_array[] = $v; 
    } 
    $start = $v;  
} 
var_dump($new_array); 

测试其工作..

输出>array(3) { [0]=> string(3) "111" [1]=> string(2) "22" [2]=> string(1) "1" }