Php 将波斯语数字转换为英语数字
我正在将波斯语转换为英语/数字,但我有两个不同数组的问题。具有相同的功能,但输出不同Php 将波斯语数字转换为英语数字,php,Php,我正在将波斯语转换为英语/数字,但我有两个不同数组的问题。具有相同的功能,但输出不同 function convertNumbers($number) { $arr2 = ['۰', '۱', '۲', '۳', '۴', '۵', '۶', '۷', '۸', '۹']; // Converting $arr1 = ['٠', '١', '٢', '٣', '٤', '٥', '٦', '٧', '٨', '٩']; // Not converting $num = ra
function convertNumbers($number)
{
$arr2 = ['۰', '۱', '۲', '۳', '۴', '۵', '۶', '۷', '۸', '۹']; // Converting
$arr1 = ['٠', '١', '٢', '٣', '٤', '٥', '٦', '٧', '٨', '٩']; // Not converting
$num = range(0, 9);
$englishNumber[0] = str_replace($arr1, $num, $number);
$englishNumber[1] = str_replace($arr2, $num, $number);
return $englishNumber;
}
print_r(convertNumbers('۹۰'));
输出:数组([0]=>۹۰[1]=>90)
$arr2
工作正常,但$arr1
工作不正常。看起来4和6在这两个声明的数组中是不同的,并且排列方式是从左到右,反之亦然。任何建议。数组$arr1和$arr2包含不同的字符。转换为unicode后,它是可见的
$arr1 = ['٠', '١', '٢', '٣', '٤', '٥', '٦', '٧', '٨', '٩'];
$arr2 = ['۰', '۱', '۲', '۳', '۴', '۵', '۶', '۷', '۸', '۹'];
$arr1包含阿拉伯-印度数字零的字符。。阿拉伯-印度数字9
\u{660}\u{661}\u{662}\u{663}\u{664}\u{665}\u{666}\u{667}\u{668}\u{669}
\u{6f0}\u{6f1}\u{6f2}\u{6f3}\u{6f4}\u{6f5}\u{6f6}\u{6f7}\u{6f8}\u{6f9}
和$arr2扩展阿拉伯-印度数字零。。扩展阿拉伯-印度数字9
\u{660}\u{661}\u{662}\u{663}\u{664}\u{665}\u{666}\u{667}\u{668}\u{669}
\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}"
];
具有相同形状的字符现在不能混淆。数组$arr1和$arr2包含不同的字符。转换为unicode后,它是可见的
$arr1 = ['٠', '١', '٢', '٣', '٤', '٥', '٦', '٧', '٨', '٩'];
$arr2 = ['۰', '۱', '۲', '۳', '۴', '۵', '۶', '۷', '۸', '۹'];
$arr1包含阿拉伯-印度数字零的字符。。阿拉伯-印度数字9
\u{660}\u{661}\u{662}\u{663}\u{664}\u{665}\u{666}\u{667}\u{668}\u{669}
\u{6f0}\u{6f1}\u{6f2}\u{6f3}\u{6f4}\u{6f5}\u{6f6}\u{6f7}\u{6f8}\u{6f9}
和$arr2扩展阿拉伯-印度数字零。。扩展阿拉伯-印度数字9
\u{660}\u{661}\u{662}\u{663}\u{664}\u{665}\u{666}\u{667}\u{668}\u{669}
\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}"
];
具有相同形状的字符现在不能混淆。
$arr2
似乎包含波斯数字,$arr1
似乎包含阿拉伯数字。这意味着第一个数组中的٠
与第二个数组中的۰
不同,尽管形状相似
为了确保它们不同,您可以运行bin2hex()
:
产出:
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
$arr2
似乎包含波斯数字,$arr1
似乎包含阿拉伯数字。这意味着第一个数组中的٠
与第二个数组中的۰
不同,尽管形状相似
为了确保它们不同,您可以运行bin2hex()
:
产出:
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
那是因为你使用了两种不同的编码。这就像你有一个从A到C的数组,另一个从D到F的数组,并且将每个A-C都更改为一个数字-不会更改第二个数组的任何内容。在您的示例中:
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)这是因为您使用了两种不同的编码。这就像你有一个从A到C的数组,另一个从D到F的数组,并且将每个A-C都更改为一个数字-不会更改第二个数组的任何内容。在您的示例中:
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)对我来说,
$arr1
是array\u反向($arr2)
。此外,您从不使用这些数组。您能澄清问题吗?请提供问题的正确答案。@04FS先生,如果您在函数中使用$arr1
,它将不起作用,并且无法转换为英文/数字。另一方面,$arr2
工作正常。这就是我要问的。因为两个数组都有微小的差异。但结果却不一样。这就是我需要理解并试图得到答案的地方。@HassanRaza返回的输出应该是不同的,因为它是两个不同的数组,甚至不是相反的数组。你得到的结果是什么?你期望什么?(其他:arr1和2是示例,它们代替了$persis。)(也许您应该尝试range('0','9')?@04FS,不同的方向是因为HTML代码块呈现,否则$arr1[0]
和$arr2[0]
包含类似的字符0
。在我看来,$arr1
是array\u reverse($arr2)
。此外,您从不使用这些数组。您能澄清问题吗?请提供问题的正确答案。@04FS先生,如果您在函数中使用$arr1
,它将不起作用,并且无法转换为英文/数字。另一方面,$arr2
工作正常。这就是我要问的。因为两个数组都有微小的差异。但结果却不一样。这就是我需要理解并试图得到答案的地方。@HassanRaza返回的输出应该是不同的,因为它是两个不同的数组,甚至不是相反的数组。你得到的结果是什么?你期望什么?(其他:arr1和2是示例,它们代替了$persian。)(也许你应该尝试range('0','9')?@04FS,不同的方向是因为HTML代码块呈现,否则,$arr1[0]
和$arr2[0]
包含类似的字符0
。这将打印2