我正在获取复选框数组的值(动态创建)。有几个问题,但我把它缩小到某一点。现在问题的摘要是这个(忘了一秒钟这些是复选框,只是想象我们正在使用一组数字)。
我有一个数组 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:我没有包含数组声明和其他前面的代码,因为我已经测试了它,我知道它们没问题。问题在于这部分代码的逻辑。
答案 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,
)