使用布尔值数组的范围



嘿,伙计们,我正在使用已经建立的现有系统中的分数范围函数,分数以布尔值数组的形式存储,例如:

[true, true, true, true, true, true, false, false, false...]

等级号为element + 1

我想创建一个基于这个数组的范围函数,例如,这个数组的范围是1-6级,知道什么是最有效的方法来做这样的事情,我正在考虑运行循环并在值为false时停止范围,但也许有更好的方法。

循环显然是最简单的方法。没有更有效的方法,除非我们知道更严格的约束或在存储数据本身时所做的任何修改。

肯定有一个行符,你可以得到范围的大小。范围显然是1 - size。您可以使用array_search获得false的第一个元素的索引,并使用该索引表示范围的长度/大小。

我们使用array_merge故意添加一个假false值,以使函数在所有真值的情况下返回正确的大小。

片段:

<?php
echo array_search(false, array_merge($d, [false]));
<<p>在线演示/strong>

更新:

看看你的新需求,你可以这样做:

<?php
$start = $end = 0;
foreach($d as $idx => $val){
if($val){
$end = $idx + 1;
if($start == 0) $start = $idx + 1;
}else if($start != 0){
break;
}
}
echo $start, " - ", $end;
<<p>在线演示/strong>

通常array_count_values帮助计数数组中的重复值,但如果你有布尔值,那么它将不起作用。但是array_filter可以帮助计数布尔值。下面是示例:

echo $true_count = count(array_filter(array_values($array)));
echo $false_count = count($input_array) - $true_count;

希望这对你有帮助!

感谢

最新更新