數組怎樣才能被分成幾組相同的元素(連接字符)。 例如,我有這樣的數組:PHP組重複數組中的元素
Array(
[0] => 1
[1] => 1
[2] => 1
[3] => 2
[4] => 2
[5] => 1
)
,並希望將所有相同的號碼只有一個元素,與拼接帶來在一起,得到這樣的:
Array(
[0] => 111
[1] => 22
[2] => 1
)
數組怎樣才能被分成幾組相同的元素(連接字符)。 例如,我有這樣的數組:PHP組重複數組中的元素
Array(
[0] => 1
[1] => 1
[2] => 1
[3] => 2
[4] => 2
[5] => 1
)
,並希望將所有相同的號碼只有一個元素,與拼接帶來在一起,得到這樣的:
Array(
[0] => 111
[1] => 22
[2] => 1
)
要組的所有相同的元件(不會只是串聯工作相鄰的相同元素)
$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)
非常感謝第二種解決方案。 – drake2300
$newarray = array_unique($oldarray);
$count = array_count_values($oldarray);
foreach($newarray as &$val){
$val = str_repeat($val,$count[$val]);
}
<?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;
}
?>
這可能會解決當前的問題,但只適用於整數。 – 2012-11-01 10:42:32
只需使用其他級聯方法,如。=用於其他... –
這裏有兩個函數 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;
}
$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" }
你嘗試你自己做了嗎? – Sergey
是否要將所有相同的元素組合在一起或僅包含相鄰的相同元素? – air4x
爲什麼[2] => 1,我想知道?這裏不是'1'與這些'1'相同嗎? – raina77ow