1 回答

TA貢獻1815條經驗 獲得超10個贊
如果你想計算字符串數組中每個字母的頻率,你可以使用mb_str_split()
和array_count_values()
例如,我的數據庫中有兩行:
foo bar
this is a test of emoji ??
考慮以下代碼。在這里,我使用mb_str_split()然后使用另一個foreach循環將循環內的每個值拆分為單獨的字符,然后array_count_values($arrLetters)計算每個字符的頻率。
$stmt = $conn->prepare("SELECT test from tabletest");
$stmt->execute();
$result = $stmt->get_result();
foreach ($result as $row) {
? ? // split the string into characters
? ? $arrLetters = mb_str_split($row['test']);
? ? $countLetters = count($arrLetters);
? ? // count frequence of each character and immediately display results
? ? foreach (array_count_values($arrLetters) as $letter => $total) {
? ? ? ? echo $letter.": ".$total.": ".round(($total / $countLetters * 100), 2)."%\n";
? ? }
? ? echo '--------------'.PHP_EOL;
}
它將產生以下輸出:
f: 1: 14.29%
o: 2: 28.57%
?: 1: 14.29%
b: 1: 14.29%
a: 1: 14.29%
r: 1: 14.29%
--------------
t: 3: 12%
h: 1: 4%
i: 3: 12%
s: 3: 12%
?: 6: 24%
a: 1: 4%
e: 2: 8%
o: 2: 8%
f: 1: 4%
m: 1: 4%
j: 1: 4%
??: 1: 4%
--------------
如果您想將所有行的頻率作為一個結果,那么您可以將其全部分解為一個字符串,并且無需循環即可完成。
$stmt = $conn->prepare("SELECT test from tabletest");
$stmt->execute();
$result = $stmt->get_result();
// Implode it all into a single string
$text = implode(array_column($result->fetch_all(MYSQLI_NUM), 0));
// split the string into characters
$arrLetters = mb_str_split($text);
$countLetters = count($arrLetters);
// count frequence of each character and immediately display results
foreach (array_count_values($arrLetters) as $letter => $total) {
? ? echo $letter.": ".$total.": ".round(($total / $countLetters * 100), 2)."%\n";
}
這會給你這個輸出:
f: 2: 6.25%
o: 4: 12.5%
?: 7: 21.88%
b: 1: 3.13%
a: 2: 6.25%
r: 1: 3.13%
t: 3: 9.38%
h: 1: 3.13%
i: 3: 9.38%
s: 3: 9.38%
e: 2: 6.25%
m: 1: 3.13%
j: 1: 3.13%
??: 1: 3.13%
- 1 回答
- 0 關注
- 122 瀏覽
添加回答
舉報