11

文字列を のような配列に分割する方法を探していますstr_split()。チャンクはすべて異なるサイズです。

の束で文字列をループすることでそれを行うことができますがsubstr()、それはエレガントでも効率的でもありません。( ) のように文字列と配列を受け取り、1, 18, 32, 41, 108, 125, 137, 152, 161適切に切り刻まれた文字列の配列を生成する関数はありますか?

チャンクはさまざまな数の空白で区切られているため、爆発は不適切です。

4

4 に答える 4

3

今後の参考のために、@jay が提案する正規表現方法は次のようになります。

 $regex="/(.{1})(.{18})(.{32})(.{41})(.{108})(.{125})(.{137})(.{152})(.{161})/";
 preg_match($regex,$myfixedlengthstring,$arr);

$myfixedlengthstringはターゲット文字列で、$arrは結果を示します。

于 2015-10-30T19:10:54.473 に答える
1

固定長のレコードを持つ ASCII テーブルを解析するのに便利な、もう少し柔軟なバリアントです。

function ParseIrregularString  ($string, $lengths)
{ 
$parts = array(); 

foreach ($lengths as $StringKey => $position)
    { 
    $parts[$StringKey] = substr($string, 0, $position); 
    $string = substr($string, $position); 
    } 

return $parts; 
} 

以下を提出します。

$string = "abcdefghiklmnopqrstuvz";
$lengths = array ("field1"=>4, "field2"=>3, "field3"=>5, "field4"=>2);
print_r (ParseIrregularString ($string, $lengths));

戻り値:

Array ( [field1] => abcd [field2] => efg [field3] => hiklm [field4] => no )
于 2012-07-13T13:05:26.543 に答える