【问题标题】:Returning keys if 3 adjacent values match如果 3 个相邻值匹配,则返回键
【发布时间】:2014-09-23 06:10:32
【问题描述】:

我有以下数组

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

我知道如何获取中点并使用ceil()floor() 来获取最接近的整数值以及如何检查该中点前后的值是否与我的中点具有相同的值。

我的问题是,我需要三个相邻的 true 值才能让我的条件返回 true。在此示例中,使用中点和与其相邻的值将返回 false。中点是我在这里的首选位置,因为如果我的情况返回true,我需要在那里做点什么。然而,当这返回false 时,我需要获得三个相邻的true 值的任何其他位置。我需要获取密钥,因为我需要确定中点的密钥,因为我需要在那里插入一个值。

因此,在我的示例中,我需要返回键号 7、8 和 9,而不是这些键的值

有什么建议可以实现吗?

【问题讨论】:

  • 你能再举个例子吗
  • 什么意思,我需要清理什么? :-)

标签: php arrays


【解决方案1】:

我不确定你是否想要这个。无论如何请尝试以下代码

$a = array(true, false, false, true, true, false, false, true, true, true, false, false);
for ($i=0;$i<(sizeof($a)-1);$i++)
{
    if($i!=0&&$i!=(sizeof($a)-1))
    {
        if($a[$i-1]==$a[$i])
        {
            if($a[$i]==$a[$i+1])
            {
                echo ($i-1).','.$i.','.($i+1).'<br>';
            }
        }

    }
}

【讨论】:

  • 我现在无法测试它。今天下午会很快测试。还必须测试其他答案:-)。将让您了解最新情况。谢谢
【解决方案2】:

将数组转换为包含'1'和'0'的字符串,然后搜索'111':

$a = [true, false, false, true, true, false, false, true, true, true, false, false];

$b = array_map(function ($item) {
    return $item ? 1 : 0;
}, $a);

$joined = implode('', $b);
if (($pos = strpos($joined, '111')) !== false) {
    printf("Your positions are %d, %d and %d\n", $pos, $pos +1, $pos + 2);
} else {
    printf("Did not found 3 consecutive 'true'");
}

【讨论】:

  • 我其实没想过这样做。今天下午去测试。为您的想法 +1
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-03
  • 1970-01-01
相关资源
最近更新 更多