3 回答
TA贡献1799条经验 获得超6个赞
$arr2似乎包含波斯数字,$arr1似乎包含阿拉伯数字。这意味着第一个数组中的第二个数组٠不一样۰,尽管形状相似。
为确保它们不同,您可以运行bin2hex():
foreach ($arr2 as $key => $value) {
echo $key, ': ', bin2hex($value), ' - ', bin2hex($arr1[$key]), "\n";
}
输出:
0: dbb0 - d9a0
1: dbb1 - d9a1
2: dbb2 - d9a2
3: dbb3 - d9a3
4: dbb4 - d9a4
5: dbb5 - d9a5
6: dbb6 - d9a6
7: dbb7 - d9a7
8: dbb8 - d9a8
9: dbb9 - d9a9
TA贡献1828条经验 获得超4个赞
数组 $ arr1 和 $ arr2 包含不同的字符。转换为 unicode 后可见。
$arr1 = ['٠', '١', '٢', '٣', '٤', '٥', '٦', '٧', '٨', '٩'];
$arr2 = ['۰', '۱', '۲', '۳', '۴', '۵', '۶', '۷', '۸', '۹'];
$arr1 包含字符 ARABIC-INDIC DIGIT ZERO .. ARABIC-INDIC DIGIT NINE
\u{660}\u{661}\u{662}\u{663}\u{664}\u{665}\u{666}\u{667}\u{668}\u{669}
和 $arr2 扩展阿拉伯-印度数字零..扩展阿拉伯-印度数字九
\u{6f0}\u{6f1}\u{6f2}\u{6f3}\u{6f4}\u{6f5}\u{6f6}\u{6f7}\u{6f8}\u{6f9}
我认为使用哪个数组取决于写入方向。但我不是语言专家。
补充说明:
这个用双引号括起来的 Unicode 序列可以在 PHP 源代码中使用,输出是这个代码点的 UTF-8 表示。
$persNum = [ //"۰" .. "۹"
"\u{6f0}","\u{6f1}","\u{6f2}","\u{6f3}","\u{6f4}",
"\u{6f5}","\u{6f6}","\u{6f7}","\u{6f8}","\u{6f9}"
];
现在不能混淆具有相同形状的字符。
TA贡献1993条经验 获得超5个赞
那是因为您使用了 2 种不同的编码。就像您有一个从 A 到 C 的数组,以及另一个从 D 到 F 的数组,并且将每个 AC 更改为一个数字 - 不会更改第二个数组的任何内容。在您的示例中:
function convertNumbers($number)
{
$arr2 = ['A', 'B', 'C']; // Converting
$arr1 = ['F', 'E', 'D']; // Not converting
$num = range(0, 2);
$englishNumber[0] = str_replace($arr1, $num, $number);
$englishNumber[1] = str_replace($arr2, $num, $number);
return $englishNumber;
}
print_r(convertNumbers('AC'));
将始终更改 AC,但永远不会更改 DF。
array(0 => "02", 1 => "DF")
长话短说,输入参数的字母在逻辑上是不同的,即使它们看起来相同,并且 str_replace 在 array1 中找不到相同的字符串。其中一个是波斯语,另一个是阿拉伯语,但您只检查其中一个的输出。
(有趣的是:它们被称为阿拉伯数字,而不是英文数字。:P)
- 3 回答
- 0 关注
- 127 浏览
添加回答
举报