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 回答