php - PHP - 句子按 3 个单词分组,然后在组更改时获取第一次出现
问题描述
我不确定如何解释它,但这是代码:
$word = 'The quick brown fox jumps over the lazy dog.';
$word_length = strlen($word);
$space_count = 1;
for ($i=0;$i<=$word_length-1;$i++)
{
if ($word[$i] == ' ')
{
$space_count++;
}
if ($space_count <= 3) //1st set
{
echo 'set1 ';
}
elseif ($space_count > 3 && $space_count <= 6) //2nd set
{
echo 'set2 ';
}
elseif ($space_count > 6 && $space_count <= 9) //3rd set
{
echo 'set3 ';
}
elseif ($space_count > 9) //4th set
{
echo 'set4 ';
}
echo $word[$i].'<br/>';
}
输出是:
set1 T
set1 h
set1 e
set1
set1 q
set1 u
set1 i
set1 c
set1 k
set1
set1 b
set1 r
set1 o
set1 w
set1 n
set2
set2 f
set2 o
set2 x
set2
set2 j
set2 u
set2 m
set2 p
set2 s
set2
set2 o
set2 v
set2 e
set2 r
set3
set3 t
set3 h
set3 e
set3
set3 l
set3 a
set3 z
set3 y
set3
set3 d
set3 o
set3 g
set3 .
所以我已经正确地将每个单词/字母分为 3 组/组。现在我被卡住了,当我现在更改为新的集合/组时。我需要确定一个组第一次发生变化的时间。所以在这种情况下 - 我需要知道第 2 组以“f”开头,这是“狐狸”的第一个词。然后第三组以“t”开头,这是“the”的第一个单词。
我需要知道这一点,因为当组/集的第一次出现更改时,我必须做一个附加条件。希望你能帮忙?
谢谢!
解决方案
有一个更好的方法和更动态的,因为你只坚持了 3 套。
努力制作一个数组,然后任何集合的第一个字符都是[0][0]
,例如:
<?php
$word = 'The quick brown fox jumps over the lazy dog.';
$sets = array_chunk(explode(' ',$word), 3);
$sets = array_combine(array_map(function($key){ return 'set'.($key+1); }, array_keys($sets)), $sets);
/*
Array
(
[set1] => Array
(
[0] => The
[1] => quick
[2] => brown
)
[set2] => Array
(
[0] => fox
[1] => jumps
[2] => over
)
[set3] => Array
(
[0] => the
[1] => lazy
[2] => dog.
)
)
*/
// then to grab first chars
// f
echo $sets['set2'][0][0];
// t
echo $sets['set3'][0][0];
要获得总集合,您只需要count($sets)
,只获得一个集合,您只需要$set['set1']
,获取所有集合中的所有第一个单词,您只需要array_column($sets, '0')
,获取所有键/集合array_keys($sets)
。比遍历每个字符并计算事物要简单得多。
然后/或将其重新组合在一起,重新循环它:
$str = '';
foreach ($sets as $set) $str .= implode(' ', $set).' ';
echo trim($str);
或使用减少:
echo trim(array_reduce($sets, function($acc, $set) {
return $acc .= implode(' ', $set).' ';
}, ''));
推荐阅读
- c# - 在 ASP.NET Core Web API 中使用系统和使用 Microsoft 导入的所有问题
- javascript - 根据包含单元格的引号字符转换数组单元格
- javascript - Javascript将数组转换为具有备用索引作为键和值的对象
- javascript - 主程序中的等待是否使 js 调用堆栈为空,从而为回调提供了运行的机会?
- typescript - 打字稿可选链接将所有内容标记为未定义
- linux - 为什么在 kali linux 上使用 find 命令时出现“权限被拒绝”错误流
- objective-c - firebase-dynamic-links - [33353:495188] 8.5.0[Firebase/Analytics][I-ACS023001]Deep Link 不包含有效的必需参数。"match_message"="No pre
- open3d - 有没有办法从 open3d 中的另一个 Visualizer 获取缩放属性
- python - 数据字段的映射
- node.js - 参数中的节点JS未定义变量