Hallo Leute, ich habe eine kleine Frage, bei der ich einen String als habe

"Hallo, mein Name ist XYZ"

Jetzt weiß ich, dass ich die Länge der Wörter finden kann, da "Hallo" 5 Zeichen und "Mein" 2 Zeichen hat. Mit folgendem Code

$text = file_get_contents('text.txt'); // $text = 'Hello my name is XYZ';
$words = str_word_count($text, 1);
$wordsLength = array_map(
function($word) { return mb_strlen($word, 'UTF-8'); },
$words
);

var_dump(array_combine($words, $wordsLength));

Aber was ist, wenn ich feststellen möchte, dass die Anzahl der Wörter mit der Länge 1 0 ist? Die Anzahl der Wörter mit der Länge 2 ist 2. Die Anzahl der Wörter mit der Länge 3 ist 1 und so weiter bis zur Anzahl der Länge 10

Hinweis: Ich erwäge die Wortlänge, bis ein Leerzeichen vorhanden ist. Angenommen, die Daten enthalten ein Datum wie den 20.04.2016. Daher sollte mir angezeigt werden, dass die Zahl Wörter mit der Länge 10 1 ist.

Und noch eine Sache, wie finde ich die durchschnittliche Länge für die Wörter in der Zeichenfolge. Vielen Dank im Voraus

1
Yash Tewari 21 Feb. 2020 im 22:56

3 Antworten

Beste Antwort

Wenn Sie array_count_values() für das Array $wordsLength verwenden, werden die vorhandenen Zeichenfolgenlängen gezählt. Wenn Sie dies und ein Vorlagenarray (erstellt mit array_fill()) mit den Elementen 1-10 und einem Wert von 0 verwenden, erhalten Sie eine Liste aller Wortzahlen ...

$counts = array_replace(array_fill(1, 9, 0), 
             array_count_values($wordsLength));

Wird geben ...

Array
(
    [1] => 0
    [2] => 2
    [3] => 1
    [4] => 1
    [5] => 1
    [6] => 0
    [7] => 0
    [8] => 0
    [9] => 0
)
2
Nigel Ren 21 Feb. 2020 im 20:06

Hallo, versuchen Sie es, es funktioniert am Datum und Sonderzeichen, Emojis

enter image description here

$text = 'Hello 20.04.2016  🚩 my   face😘face  is XYZ';

$words =preg_split('/\s+/', $text);

$wordsLength = array_map(
function($word) { return mb_strlen($word, 'UTF-8'); }  ,$words);

print_r($words);

//Get Average word Length
$avg=round(array_sum($wordsLength)/count($words),1);
//print Avg
print($avg);

?>
1
Rkv88 - Kanyan 21 Feb. 2020 im 21:06

(Demo)

$text = '    Hello 20.04.2016  🚩 my   incredibleness face😘face  is XYZ    ';

Generieren Sie ein Array von fortlaufend sichtbaren Zeichen

$words = preg_split('/\s+/', $text, 0, PREG_SPLIT_NO_EMPTY);
array (
  0 => 'Hello',
  1 => '20.04.2016',
  2 => '🚩',
  3 => 'my',
  4 => 'incredibleness',
  5 => 'face😘face',
  6 => 'is',
  7 => 'XYZ',
)

Ersetzen Sie sichtbare Zeichenfolgen durch ihre Multibyte-Länge. Beachten Sie die einfachere Syntax

$wordsLength = array_map('mb_strlen', $words);
array (
  0 => 5,
  1 => 10,
  2 => 1,
  3 => 2,
  4 => 14,
  5 => 9,
  6 => 2,
  7 => 3,
)

Gruppen- und Zähllängen

$lengthCounts = array_count_values($wordsLength);
array (
  5 => 1,
  10 => 1,
  1 => 1,
  2 => 2,
  14 => 1,
  9 => 1,
  3 => 1,
)

Richten Sie ein Array von Standardwerten ein, da $lengthCounts möglicherweise Lücken aufweist

$defaultCounts = array_fill_keys(range(1,10), 0);
array (
  1 => 0,
  2 => 0,
  3 => 0,
  4 => 0,
  5 => 0,
  6 => 0,
  7 => 0,
  8 => 0,
  9 => 0,
  10 => 0,
)

Filtern Sie die Zählungen, um Elemente / Zählungen zu entfernen, die außerhalb des Bereichs liegen

$filteredCounts = array_intersect_key($lengthCounts, $defaultCounts);
array (
  5 => 1,
  10 => 1,
  1 => 1,
  2 => 2,
  9 => 1,
  3 => 1,
)

Überschreiben Sie die Standardeinstellungen mit gefundenen Zählwerten, um Lücken in der Ausgabe zu vermeiden

$gaplessCounts = array_replace($defaultCounts, $filteredCounts);
array (
  1 => 1,
  2 => 2,
  3 => 1,
  4 => 0,
  5 => 1,
  6 => 0,
  7 => 0,
  8 => 0,
  9 => 1,
  10 => 1,
)
0
mickmackusa 21 Feb. 2020 im 21:38