删除数组中1后面的零

时间:2015-02-02 15:55:39

标签: php arrays loops

我正在获取复选框数组的值(动态创建)。有几个问题,但我把它缩小到某一点。现在问题的摘要是这个(忘了一秒钟这些是复选框,只是想象我们正在使用一组数字)。

我有一个数组 store [20] ,其中包含0或1的值。 我需要摆脱一个跟随的每个0。 防爆。假设我的数组是 store = {0,1,0,1,0,0} 。 我需要创建一个类似于 check = {0,1,1,0} 的新数组。 第三和第五项不必插入新数组中,因为它们遵循第二和第四项(即1)。

此外,如果你想知道,没有连续两次出现,所以不必担心。

这是我的php代码(但是其他语言的实现是相同的,因为它只用于循环和数组):

$j=0;   $count=0;
    for($j=0;$j<20; $j++) {
        $check[$j] = $store[$j + $count];
        if($store[$j]) {
            $count = $count + 1;                
        }
    }

代码无法正常工作。也许我实施它的方式是错的。但我有点累了,开始看东西。我真的无法看到我做错了什么。

PS:我没有包含数组声明和其他前面的代码,因为我已经测试了它,我知道它们没问题。问题在于这部分代码的逻辑。

3 个答案:

答案 0 :(得分:1)

在PHP中,您可以使用str_split,一个小正则表达式和一个implode,而不必担心for循环。添加array_map,结果将以整数而不是字符串形式返回。

$check = array_map('intval',str_split('',preg_replace('/01/','',implode('',$store))));

演示:

<?php
    $store = array(0, 1, 0, 1, 0, 0);
    $check = str_split(preg_replace('/10/','1',implode('',$store)));
    var_dump($check);
    $check = array_map('intval',$check)
    var_dump($check);
?>

答案 1 :(得分:0)

这是我从运行代码中获得的输出:

Array
(
    [0] => 0
    [1] => 1
    [2] => 1
    [3] => 0
    [4] =>
    [5] =>
    [6] =>
    [7] =>
    [8] =>
    [9] =>
    [10] =>
    [11] =>
    [12] =>
    [13] =>
    [14] =>
    [15] =>
    [16] =>
    [17] =>
    [18] =>
    [19] =>
)

所以基本上它正在工作,除了你的数组末尾存在空值,因为你正在读取$store数组范围之外的值。只需检查你的for循环中是否超出了数组的范围。注意我在操作中添加了+$count

$store = array(0, 1, 0, 1, 0, 0);
$j=0;
$count=0;
$check = array();

for($j=0;$j+$count<count($store); $j++) {
    $check[] = $store[$j + $count];
    if($store[$j+$count]) {
        $count = $count + 1;                
    }
}

输出:

Array
(
    [0] => 0
    [1] => 1
    [2] => 1
    [3] => 0
)

答案 2 :(得分:0)

我理解这个问题你只需要前面的元素来决定结果中是否包含0:

<?php
$store=[0, 1, 0, 1, 0, 0];

$prev=0; $result = array();
foreach($store as $e) {
    if ( $e || !$prev ) {
        $result[] = $e;
    }
    $prev = $e;
}

var_export($result);

...最有可能是一个更优雅的解决方案,但这个打印

array (
  0 => 0,
  1 => 1,
  2 => 1,
  3 => 0,
)