位流中的位更改位置
bit change location in bit stream
比特流:
0 0 0 1 1 1 1 0 0 1 1 0 0 0 1 0
期望输出:
4-7,10-11,15
我的函数:
$flag = 0;
$str = '';
for( $i=0; $i < count( $array ); $i++ ){
if( 0 == $array[$i] ){
$flag = 0;
continue;
}
if( $i > 0 && $session_array[$i] == $session_array[$i-1] ){
$flag = 1;
continue;
}
$str .= (string)$i+$flag . ',';
}
但它没有产生所需的输出。有什么建议吗?
与 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
比特流:
0 0 0 1 1 1 1 0 0 1 1 0 0 0 1 0
期望输出:
4-7,10-11,15
我的函数:
$flag = 0;
$str = '';
for( $i=0; $i < count( $array ); $i++ ){
if( 0 == $array[$i] ){
$flag = 0;
continue;
}
if( $i > 0 && $session_array[$i] == $session_array[$i-1] ){
$flag = 1;
continue;
}
$str .= (string)$i+$flag . ',';
}
但它没有产生所需的输出。有什么建议吗?
与 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