php数组分组

时间:2012-08-14 18:40:58

标签: php arrays grouping

我有这个数组:

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他们将发送消息的用户对消息进行分组,直到另一个用户进入并打破该组。 但无法弄清楚如何。

由于

2 个答案:

答案 0 :(得分:0)

未经测试,因为您没有提供复制/粘贴样本输入。

$prev = current($arr);
$grp = array();
$res = array();
foreach ($arr as $v) {
    if ($v === $prev) {
        $grp[] = $v;
    } else {
        $res[] = $grp;
        $grp = array();
    }
    $prev = $v;
}

答案 1 :(得分:0)

你必须自己循环,找到当前元素$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);
}

will print

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
        )

)