1 回答
TA貢獻(xiàn)1815條經(jīng)驗(yàn) 獲得超10個(gè)贊
如果你想計(jì)算字符串?dāng)?shù)組中每個(gè)字母的頻率,你可以使用mb_str_split()和array_count_values()
例如,我的數(shù)據(jù)庫(kù)中有兩行:
foo bar
this is a test of emoji ??
考慮以下代碼。在這里,我使用mb_str_split()然后使用另一個(gè)foreach循環(huán)將循環(huán)內(nèi)的每個(gè)值拆分為單獨(dú)的字符,然后array_count_values($arrLetters)計(jì)算每個(gè)字符的頻率。
$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;
}
它將產(chǎn)生以下輸出:
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%
--------------
如果您想將所有行的頻率作為一個(gè)結(jié)果,那么您可以將其全部分解為一個(gè)字符串,并且無(wú)需循環(huán)即可完成。
$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";
}
這會(huì)給你這個(gè)輸出:
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 關(guān)注
- 148 瀏覽
添加回答
舉報(bào)
