0

連想配列からの連続番号間のすべての違いをグループ化するにはどうすればよいですか?以下は私が使用している配列です

(2,3)(7,8)をそれらの違いでグループ化する必要があり、(11,6,5,9)を無視します

$array = array(
    2 =>"12",
    3 =>"12",
    11 => "16",
    6 => "15",
    5 => "14",
    7 => "16",
    8 => "17",
    9 => "18")

以下は、配列をグループ化するために使用しているコードですが、機能していません。

foreach ($array as $k => $v) {
    echo  $prev;
    if (isset($prev)) {
        if (($v - $prev) != 1) $newArray[] = $v;
    } else { $newArray[] = $v; }
    $prev = $v;
}
echo '<pre>';
print_r($newArray);

現在、私はこれを取得しています:

Array
(
    [0] => 12
    [1] => 12
    [2] => 16
    [3] => 15   
    [4] => 16
)

しかし、私はO / Pが (2,3)=0違い、(7,8)=1違いである必要があります。

array(
    [0]=>0,
    [1]=>1
);
4

1 に答える 1

2

それではどうぞ。

$newArray = array();
foreach ($array as $k => $v) {
    if (isset($prev) && $k == $prev + 1) {
        $newArray[] = $v - $array[$prev];
    }
    $prev = $k;
}

これにより、連続する 3 つのペアの配列が生成されます。

Array
(
    [0] => 0
    [1] => 1
    [2] => 1
)

2 つのペアの後に停止する場合は、実行中のカウンター$i = 0;を の前に追加し、ループ内foreachで終了します。if (++$i >= 2) break;if

$newArray = array();
$i = 0;
foreach ($array as $k => $v) {
    if (isset($prev) && $k == $prev + 1) {
        $newArray[] = $v - $array[$prev];
        if (++$i >= 2) break;
    }
    $prev = $k;
}
于 2012-08-21T17:03:30.117 に答える