首页 > 解决方案 > 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”的第一个单词。

我需要知道这一点,因为当组/集的第一次出现更改时,我必须做一个附加条件。希望你能帮忙?

谢谢!

标签: phpfor-loop

解决方案


有一个更好的方法和更动态的,因为你只坚持了 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];

https://3v4l.org/TOFbo

要获得总集合,您只需要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).' ';
}, ''));

推荐阅读