簡體   English   中英

位流中的位更改位置

[英]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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM