首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >位流中的位改变位置

位流中的位改变位置
EN

Stack Overflow用户
提问于 2015-05-24 14:38:09
回答 1查看 94关注 0票数 1

比特流:

代码语言:javascript
复制
0 0 0 1 1 1 1 0 0 1 1 0 0 0 1 0

理想的outbpu:

代码语言:javascript
复制
4-7,10-11,15

我的职能:

代码语言:javascript
复制
$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 . ',';
}

但是它并没有产生期望的输出。有什么建议吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-05-24 16:05:46

array_reduce变体

代码语言:javascript
复制
$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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30424708

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档