Итак, у меня есть упражнение, я провел некоторое исследование и сумел preg_split мою строку по точкам. Теперь у меня есть массив, как я хочу, и я хочу попасть внутрь элементов этого массива, чтобы я мог посчитать слова в каждом из элементов.
Могу ли я помочь с этим? Строка $ test написана на греческом языке.
$test = "Αυτή είναι η 1η δοκιμασία. Πρέπει να την ολοκληρώσω. Ώστε να μου δώσουν την 2η δοκιμασία. Και τέλος, την 3η δοκιμασία." ;
$res = preg_split ("/(.*?\.*?)\../", $test, NULL,
PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE);
print_r($res);
результат примерно такой:
Array
(
[0] => Αυτή είναι η 1η δοκιμασία
[1] => Πρέπει να την ολοκληρώσω
[2] => Ώστε να μου δώσουν την 2η δοκιμασία
[3] => Και τέλος, την 3η δοκιμασία.
)
и, как я сказал ранее, я хочу получить доступ к каждому элементу (например, [0], [1], [2], [3]) и вывести количество слов, которое есть у каждого из них. Но я не могу найти способ, как …
Это должно работать —
foreach($res as $str) {
print_r(count(explode(' ', $str)));
}
Выход
5
4
7
5
Вы можете использовать preg_split с array_map.
$test = "Αυτή είναι η 1η δοκιμασία. Πρέπει να την ολοκληρώσω. Ώστε να μου δώσουν την 2η δοκιμασία. Και τέλος, την 3η δοκιμασία." ;
$res = preg_split(
"/(.*?\.*?)\../",
$test,
null,
PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE
);
var_dump($res);
$wordcounts = array_map(function ($item) {
return count(preg_split('/\s+/', $item));
}, $res);
var_dump($wordcounts);
Выход: https://3v4l.org/JNBYX
Вы можете использовать word_wount при просмотре массива, чтобы узнать количество слов, и substr, чтобы узнать, есть ли слово в предложении.
<?php
$str = "Hello fri3nd, you're
looking good today!";
print_r(str_word_count($str, 1));
print_r(str_word_count($str, 2));
print_r(str_word_count($str, 1, 'àáãç3'));
echo str_word_count($str);
?>
Приведенный выше пример выведет:
Array
(
[0] => Hello
[1] => fri
[2] => nd
[3] => you're
[4] => looking
[5] => good
[6] => today
)
Array
(
[0] => Hello
[6] => fri
[10] => nd
[14] => you're
[29] => looking
[46] => good
[51] => today
)
Array
(
[0] => Hello
[1] => fri3nd
[2] => you're
[3] => looking
[4] => good
[5] => today
)
<?php
$text = 'This is a test';
echo strlen($text); // 14
echo substr_count($text, 'is'); // 2
// the string is reduced to 's is a test', so it prints 1
echo substr_count($text, 'is', 3);
// the text is reduced to 's i', so it prints 0
echo substr_count($text, 'is', 3, 3);
// generates a warning because 5+10 > 14
echo substr_count($text, 'is', 5, 10);
// prints only 1, because it doesn't count overlapped substrings
$text2 = 'gcdgcdgcd';
echo substr_count($text2, 'gcdgcd');
?>
Источник: PHP.net
Более мощный и эффективный способ сделать это будет
<?php
if(preg_match($pattern,$sentence)); /** Sentece can be a list like $sentence[0]*/
$count++;
?>
the word.
На самом деле зависит от вашей структуры кода и ввода
Вы можете перебирать свой массив так, как хотите: используя for
или же foreach
петли.
$sentencesCount = count($res);
$wordsCounts = [];
for($i = 0; $i < $sentencesCount; $i++) {
$wordsCounts[$i] = str_word_count($res[$i]);
}
print_r($wordsCounts);
ИЛИ ЖЕ
$wordsCounts = [];
foreach($res as $key => $words) {
$wordsCounts[$key] = str_word_count($words);
}
print_r($wordsCounts);
Также, пожалуйста, проверьте PHP str_word_count () многобайтово безопасно? и документы http://php.net/manual/en/function.str-word-count.php