Как получить доступ к элементам массива и посчитать слова в нем? - PullRequest
0 голосов
/ 29 августа 2018

Итак, у меня есть упражнение, я провёл небольшое исследование и сумел 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]) и вывести количество слов, которое есть у каждого из них. Но я не могу найти способ, как ...

Ответы [ 4 ]

0 голосов
/ 29 августа 2018

Вы можете перебирать массив по своему усмотрению: используя циклы for или foreach.

$sentencesCount = count($res);
$wordsCounts = [];
for($i = 0; $i < $sentencesCount; $i++) {
    $wordsCounts[$i] = str_word_count($res[$i]);
}

print_r($wordsCounts);

OR

$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

0 голосов
/ 29 августа 2018

Вы можете использовать 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

0 голосов
/ 29 августа 2018

Вы можете использовать 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.

Действительно зависит от вашей структуры кода и ввода

0 голосов
/ 29 августа 2018

Это должно работать -

foreach($res as $str) {
   print_r(count(explode(' ', $str)));
}

выход

5
4
7
5

Демо

...