文字列を のような配列に分割する方法を探していますstr_split()
。チャンクはすべて異なるサイズです。
の束で文字列をループすることでそれを行うことができますがsubstr()
、それはエレガントでも効率的でもありません。( ) のように文字列と配列を受け取り、1, 18, 32, 41, 108, 125, 137, 152, 161
適切に切り刻まれた文字列の配列を生成する関数はありますか?
チャンクはさまざまな数の空白で区切られているため、爆発は不適切です。
今後の参考のために、@jay が提案する正規表現方法は次のようになります。
$regex="/(.{1})(.{18})(.{32})(.{41})(.{108})(.{125})(.{137})(.{152})(.{161})/";
preg_match($regex,$myfixedlengthstring,$arr);
$myfixedlengthstringはターゲット文字列で、$arrは結果を示します。
固定長のレコードを持つ 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 )