2012-09-13 22 views
5

固定長にUnicode英数字の文字列を分割する方法を探しています。例えば :固定長で文字列を分割する

 

    992000199821376John Smith   20070603 

及び配列は次のようになります。

Array (
[0] => 99, 
[1] => 2, 
[2] => 00019982, 
[3] => 1376, 
[4] => "John Smith", 
[5] => 20070603 
) 

配列データは次のように分割されます:SUBSTR関数を使用して

 
    Array[0] - Account type - must be 2 characters long, 
    Array[1] - Account status - must be 1 character long, 
    Array[2] - Account ID - must be 8 characters long, 
    Array[3] - Account settings - must be 4 characters long, 
    Array[4] - User Name - must be 20 characters long, 
    Array[5] - Join Date - must be 8 characters long. 
+0

対象とする言語は? – dasblinkenlight

+0

php .. sryが忘れて –

+0

タグを追加すると、あなたの質問はよりわかりやすくなります。 – dasblinkenlight

答えて

2

それとも、プリプレグを避けたい場合:

$string = '992000199821376John Smith   20070603'; 
$intervals = array(2, 1, 8, 4, 20, 8); 

$start = 0; 
$parts = array(); 

foreach ($intervals as $i) 
{ 
    $parts[] = mb_substr($string, $start, $i); 

    $start += $i; 
} 
+0

間隔を使用すると、より多くのメンテナンスが可能になります。 +1このソリューションのために。 –

+0

申し訳ありませんが、動作しません。コードではなく、ユニコードの場合に分割します。 –

+0

'$ parts [] = mb_substr($ string、$ start、$ i、mb_detect_encoding($ string));'はどうですか? – noj

0
$s = '992000199821376Николай Шмидт  20070603'; 

    if (preg_match('~(.{2})(.{1})(.{8})(.{4})(.{20})(.{8})~u', $s, $match)) 
    { 
     list (, $type, $status, $id, $settings, $name, $date) = $match; 
    } 
0

を行うだろうこれはかなり簡単です。

$accountDetails = "992000199821376John Smith   20070603"; 
$accountArray = array(substr($accountDetails,0,2),substr($accountDetails,2,1),substr($accountDetails,3,8),substr($accountDetails,11,4),substr($accountDetails,15,20),substr($accountDetails,35,8)); 

は、その正規表現以外のトリックを、(akondによって示唆されているように)、おそらく移動するための方法(およびより柔軟)で行う必要があります。 (これは代替オプションとして有効であると考えられます)。

0

あなたが求める方法でUnicode文字列を分割することはできません。

パーツを無効にしないと不可能です。 コードポイントの中には、例えば、2つのコードポイント(UTF-8とUTF-16では4バイト)があり、未定義のため分割できない場合があります。

ユニコードで作業する場合、「文字」は非常に滑りやすい用語です。コードポイント、グリフなどがあります。http://www.utf8everywhere.orgの「文字列の長さ」の部分をご覧ください。

+1

+1。 Unicodeはいくつかの点では優れていますが、文字列処理は大変複雑です。 (おそらく "不可能"だと思いますか?おそらく "非常に難しい"だけですか?) – ghoti

+0

はい、ghoti、何が尋ねることはできません。なぜ私は説明したと思ったのですか? –

関連する問題