1

私は立ち往生していて、誰かが私を正しい方向に向けることができるかどうか疑問に思っています.

数値を含む配列があります。たとえば、次のとおりです。

$start = array(0,0,0,45,45,0,3,0,0,1,1,1,1);

そして、その配列をこの配列に変換したい:

$result = array( array('id'=>0, 'aantal'=>3,
                 array('id'=>45,'aantal'=>2),
                 array('id'=>0, 'aantal'=>1),
                 array('id'=>3,'aantal'=>1),
                 array('id'=>0, 'aantal'=>1),
                 array('id'=>1,'aantal'=>4)
                )

$start 配列をトラバースしようとしましたが、キーを持たずに $start の n-1 を調べることに行き詰まりました。

どうすればこれを行うことができるかについて誰かアドバイスがありますか?

4

1 に答える 1

1

これは、アイテムの配列をエンコードするランレングスの典型的なアプローチです。

$array = array(0,0,0,45,45,0,3,0,0,1,1,1,1);
$last = null;
$current = null;

$result = array();

foreach ($array as $item) {
    if ($item == $last) {
        // increase frequency by 1
        ++$current['aantal'];
    } else {
        // the first iteration will not have a buffer yet
        if ($current) {
            $result[] = $current;
        }
        // create buffer array item, set frequency to 1
        $current = array('id' => $item, 'aantal' => 1);
        $last = $item;
    }
}
// last pass
if ($current) {
    $result[] = $current;
}
于 2013-09-06T13:07:06.577 に答える