php - 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>
解决方案
好吧,我的问题的关键是反向思考。问题是重复的关键字,当在 PHP 中使用 in_array 函数时,它想检查数组中的所有关键字。然后我想如果我从数组中删除找到的关键字,这样它就不会再次检查了。
我认为正确的解决方案是在检查 val 是否等于答案后在 foreach 循环中添加波纹管代码:
$index = array_search($val,$answvals);
if($index !== FALSE){
unset($answvals[$index]);
}
推荐阅读
- javascript - 我怎样才能做到,当输入字段为空时,按钮什么也不做?
- java - Java - 用户将字符串输入布尔值时的验证
- python - Keras中基于误差百分位的自定义加权MSE损失函数
- r - 我如何在 R 中提取 RangedSummarizedExperiment 类的特定部分
- matlab - 如何隐藏轴但保留网格?
- python - 为什么在 while 循环中将 readline() 函数设置为等于自身移动到下一行?
- java - 如何使用 volley post 方法更新嵌套 json 对象的值?
- google-bigquery - 在为 bigQuery 编写查询时,如何使用变量而不是硬编码来编写表名和列名
- typescript - 从 reducer 函数推断类型
- javascript - 如何从动态数组中搜索相同的值并使用 JS 对这些值求和