Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.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_String_Reverse - Fatal编程技术网

PHP字符串反转不工作

PHP字符串反转不工作,php,string,reverse,Php,String,Reverse,我试图将RTL的字符串反转为LTR,但也在反转方括号。斯特列夫之所以成功是因为 它实际上不适用于UTF8字符串。所以我写了一个自定义函数,下面是我的代码 $str='תירס גדול A-10 (פרי גליל)'; function utf8_strrev($str) { $arr = ''; $words = explode(" ", $str); $start_tag = '('; $end_tag = ')'; foreach ($words

我试图将RTL的字符串反转为LTR,但也在反转方括号。斯特列夫之所以成功是因为 它实际上不适用于UTF8字符串。所以我写了一个自定义函数,下面是我的代码

$str='תירס גדול A-10 (פרי גליל)';
function utf8_strrev($str)
{

    $arr = '';
    $words = explode(" ", $str);
    $start_tag = '(';
    $end_tag = ')';
    foreach ($words as $word)
    {
        if (preg_match("/\p{Hebrew}/u", $word))
        {
                preg_match_all('/./us', $word, $ar);
                echo print_r($ar[0]);
                echo '<br>';

                $arr = join('', array_reverse($ar[0])) . " " . $arr;
        } else
        {
            preg_match_all('/./us', $word, $ar);
            $arr = join('', $ar[0]) . " " . $arr;
        }
    }

    return $arr;
}
应该是什么

(לילג ירפ) A-10 לודג סרית 

如有任何疑问,将不胜感激

在KoenHoeijmakers发布的文档评论中找到此功能。我测试过,但我不懂希伯来语,所以很难判断它是否正常工作

function utf8_strrev($str){
    preg_match_all('/./us', $str, $ar);
    return join('',array_reverse($ar[0]));
}
编辑 基于再次阅读您的问题,我认为这能满足您的需要吗

function utf8_strrev($str)
{

    $arr = '';
    $words = explode(" ", $str);
    $start_tag = '(';
    $end_tag = ')';
    foreach ($words as $word)
    {
        if (preg_match("/\p{Hebrew}/u", $word))
        {
                preg_match_all('/./us', $word, $ar);
                $arr = join('', array_reverse($ar[0])) . " " . $arr;
        } else
        {
            preg_match_all('/./us', $word, $ar);
            $arr = join('', $ar[0]) . " " . $arr;
        }
    }

    return preg_replace(array('/\)(.)/','/(.)\(/','/\}(.)/','/(.)\{/'),array('($1','$1)','{$1','$1}'),$arr);
}
$str='תירס גדול A-10 {פרי גליל}';

echo utf8_strrev($str);
输出 再说一遍,我不读希伯来语,但希望它能回答你的问题


注意我使用
preg\u replace
而不是
str\u replace
的原因是字符串替换方法给了我类似
(somthing something(
)something something)的文本,试试这个:有一个函数可以满足您的需要:)它实际上不适用于UTF8字符串。它总是用括号括起来吗?只需在末尾使用
str_replace
您不想反转字符串-您想将其从RTL更改为LTR-这可能有效:@AzharMuhammad进行了编辑,让我知道它是否有效。我必须查看它是否仍然反转,如果是,我将在我的计算机上编辑它。
function utf8_strrev($str)
{

    $arr = '';
    $words = explode(" ", $str);
    $start_tag = '(';
    $end_tag = ')';
    foreach ($words as $word)
    {
        if (preg_match("/\p{Hebrew}/u", $word))
        {
                preg_match_all('/./us', $word, $ar);
                $arr = join('', array_reverse($ar[0])) . " " . $arr;
        } else
        {
            preg_match_all('/./us', $word, $ar);
            $arr = join('', $ar[0]) . " " . $arr;
        }
    }

    return preg_replace(array('/\)(.)/','/(.)\(/','/\}(.)/','/(.)\{/'),array('($1','$1)','{$1','$1}'),$arr);
}
$str='תירס גדול A-10 {פרי גליל}';

echo utf8_strrev($str);
{לילג ירפ} A-10 לודג סרית