PHP array_count_values();把我和î视为不同的字母

时间:2016-03-08 19:02:22

标签: php word-count

我处理一些阿拉伯风格的文字。有一个数组counterChecker

它存储了一些阿拉伯语单词'$word = array();

你看到有些单词上有帽子(我们称之为“帽子”)。我尝试用方法lim', 'ali', 'kefrâ', 'lîm'计算每个单词但是它将array_count_values($word);lim视为两个不同的单词。它应该算作一个。它有不同的方法吗?我能做什么?感谢。

1 个答案:

答案 0 :(得分:0)

您可以编写特定的功能,将字符串中的“带帽子”字符转换为没有这些字符的字符。有一个例子(单词是波兰语,但原则完全相同):

<?php

$word = array('źrebię', 'łódź', 'wiazanka', 'lodź', 'wiązanka');

$result = array_count_values($word);
var_dump($result); //its wrong answer

$wordConverted = array();
foreach($word as $element)
{
    $wordConverted[] = transformSpecialChars($element);
}

var_dump(array_count_values($wordConverted)); //count correctly


function transformSpecialChars($string)
{
    $replaceFrom = array('ą', 'ę', 'ź', 'ż', 'ł', 'ó');
    $replaceTo = array('a', 'e', 'z', 'z', 'l', 'o');

    return str_replace($replaceFrom, $replaceTo, $string);
}

两个var_dump的结果:

// WRONG
array(5) {
  ["źrebię"]=>
  int(1)
  ["łódź"]=>
  int(1)
  ["wiazanka"]=>
  int(1)
  ["lodź"]=>
  int(1)
  ["wiązanka"]=>
  int(1)
}

// SEEMS FINE
array(3) {
  ["zrebie"]=>
  int(1)
  ["lodz"]=>
  int(2)
  ["wiazanka"]=>
  int(2)
}

当然,您应该适合用于转换($replaceFrom$replaceTo)的数组以满足您的需求。