-2

私はこの配列を持っています:

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は、別のユーザーが入ってグループを壊すまで、メッセージを送信したユーザーごとにメッセージをグループ化します。しかし、その方法を見つけることができません。

ありがとう

4

2 に答える 2

0

サンプル入力のコピー/貼り付けを提供しなかったため、テストされていません。

$prev = current($arr);
$grp = array();
$res = array();
foreach ($arr as $v) {
    if ($v === $prev) {
        $grp[] = $v;
    } else {
        $res[] = $grp;
        $grp = array();
    }
    $prev = $v;
}
于 2012-08-14T18:49:16.103 に答える
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);
}

これは印刷されます

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
        )

)
于 2012-08-14T18:53:45.133 に答える