Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 将波斯语数字转换为英语数字_Php - Fatal编程技术网

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