我有这个数组:
array{
0 => string '1' (length=1)
1 => string '18' (length=2)
2 => string '18' (length=2)
3 => string '1' (length=1)
4 => string '1' (length=1)
5 => string '1' (length=1)
6 => string '1' (length=1)
7 => string '1' (length=1)
8 => string '18' (length=2)
9 => string '18' (length=2)
}
我想让它看起来像这样:
array{
0 => array (
0 => '1'
)
1 => array (
0 => '18'
1 => '18'
)
2 => array (
0 => '1'
1 => '1'
2 => '1'
3 => '1'
4 => '1'
5 => '1'
)
3 => array (
0 => '18'
1 => '18'
)
}
所以这个想法是,我想通过查找下一个数组键是否与当前键相同来对数组进行分组,如果下一个数组键与当前键相同,它会将其合并到一个新数组中,就像分组一样。
我在这里或谷歌上真的找不到答案,这个想法是有键 1 然后是 2 再次 1,我想对相似的键进行分组,直到不同的键进来,键 (2) 打破分组并开始一个新组,然后按键 1 打破以启动一个新组,
这个想法是用于聊天消息,Facebook和MSN,他们按发送消息的用户对消息进行分组,直到另一个用户进来并打破该组。但不知道怎么做。
谢谢
你必须自己循环它,找到当前元素$i
与下一个元素$j
匹配的块,在相等性保持的情况下继续递增$j
,然后用array_slice()
将该部分切成自己的数组:
$new = array(); $count = count( $old) - 1;
for( $i = 0, $j = 1; $i < $count; $i = $j, $j = $i + 1) {
while( $old[$i] === $old[$j]) $j++;
$new[] = array_slice( $old, $i, $j - $i);
}
这将打印:
Array
(
[0] => Array
(
[0] => 1
)
[1] => Array
(
[0] => 18
[1] => 18
)
[2] => Array
(
[0] => 1
[1] => 1
[2] => 1
[3] => 1
[4] => 1
)
[3] => Array
(
[0] => 18
[1] => 18
)
)
未经测试,因为您没有提供复制/粘贴示例输入。
$prev = current($arr);
$grp = array();
$res = array();
foreach ($arr as $v) {
if ($v === $prev) {
$grp[] = $v;
} else {
$res[] = $grp;
$grp = array();
}
$prev = $v;
}