位流中的位更改位置

时间:2015-05-24 14:38:09

标签: php arrays bit

比特流:

AtheleteTest

期望的outbpu:

0 0 0 1 1 1 1 0 0 1 1 0 0 0 1 0

我的职能:

4-7,10-11,15

但它不会产生所需的输出。有什么建议吗?

1 个答案:

答案 0 :(得分:1)

使用array_reduce变体

$s = '0 0 0 1 1 1 1 0 0 1 1 0 0 0 1 0';

$array = explode(' ', $s);

$output = '';
// to make count from 1 but 0
array_unshift($array, 0);
// keys with value 1
$keys = array_keys($array, 1);
$c = array_reduce ($keys, function($c, $item) use (&$output) {
    if ($c[0] == -1) return array($item, $item); 
    if($item == $c[1]+1) return array($c[0], $item); 
    $output .= ($c[0] == $c[1] ? $c[0] : implode('-', $c)).','; 
    return array($item,$item);
}, array(-1,-1));

$output .= ($c[0] == $c[1] ? $c[0] : implode('-', $c));
echo $output;

结果4-7,10-11,15