首页 > 解决方案 > PHP语言中的多循环

问题描述

我有三个值循环,这让我很困惑如何显示正确的输出。

首先,我有一个句子,例如:

早在 1951 年,天文学家 Gerard P. 柯伊伯先生正在思考这些冠冕,尤其是那些在不到 200 年的时间内环绕太阳运行的冠冕。这些彗星包括哈雷彗星——最后一次从地球上看到是在 1985/86 年——和 Shoemaker-Levy 于 1994 年撞上木星。他计算出像这样的彗星必须来自离太阳系行星相当近的一条带。他注意到这些评论也往往来自非常接近行星平面的外太空,而不是来自任何旧方向。柯伊伯预测应该有一条扁平的带或彗星和小行星的飞掠,从海王星 30 AU 的轨道外开始,延伸到大约 1,000 AU 或天文单位。但是发现一颗彗星经过海王星,就像试图在距离月球 20 倍的地方看到一个 100 瓦的灯泡。好吧,回到 1992 年,我们的电视技术终于变得足够好了。

现在我在我的数据库表中标记了一些关键字,如下所示:

crowns,that,comments,frisk,finding

我将从用户方面得到一些答案:

was,that,comments,see,finding

现在我需要显示用户是否在文本中标记了正确的值,所以首先我尝试使用 foreach 循环和 in 数组函数,但问题在于重复的关键字,例如that

如何解决显示用户答案的​​问题并检查他/她的答案与标记的关键字相比是否正确。

$text_array =  preg_split("/(\w\S+\w)|(\w+)|(\s*\.{3}\s*)|(\s*[^\w\s]\s*)|\s+/", $object->text,-1, PREG_SPLIT_NO_EMPTY|PREG_SPLIT_DELIM_CAPTURE) ;
$answvals=[]; $answvals = explode(',',  $object->answer->answer);
$marked_keys = explode(',', $object->marked_keys);


        <p class="card-text">

            @foreach($text_array as $val)

            <span class="
             @if( $object->answer != null )
                      @if(in_array($val,$answvals))
                           @if(in_array($val,$marked_keys))
                    bg-success
                         @else
                       bg-danger
                         @endif
                  @endif

            @endif
            ">
            {{str_replace(' ', '', $val)}} </span>
        @endforeach
        </p>

标签: phpforeach

解决方案


好吧,我的问题的关键是反向思考。问题是重复的关键字,当在 PHP 中使用 in_array 函数时,它想检查数组中的所有关键字。然后我想如果我从数组中删除找到的关键字,这样它就不会再次检查了。

我认为正确的解决方案是在检查 val 是否等于答案后在 foreach 循环中添加波纹管代码:

            $index = array_search($val,$answvals);
              if($index !== FALSE){
                  unset($answvals[$index]);
              }

推荐阅读