2012-11-01 210 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" }