sscanf のパターン解釈に関してマニュアルだと不十分なので、詳細の分かるドキュメントを探しています。
文字列を分割するのに非常に便利なので、最近使い始めたのですが、マニュアルの通りの動作をしません。
関数 sscanf() は、printf() の入力版です。sscanf() は、文字列 str を読み込み、これを指定したフォーマット format に基づき解釈します。
これをさらっと読むと、sscanf() と printf() で同じパターンを使用すれば相互変換が可能に見えますが、実際の挙動は違います。
以下の確認用サンプルを動作させると、文字列を作るのに使用したパターンと同じパターンで処理しても、$u のように、元の配列とは異なる内容に分割されます。
なぜこうなったかは何となく分かるのですが、これを裏付けるドキュメントが探せません。
ご存知の方、教えていただけないでしょうか。
よろしくお願いいたします。
php
1<?php 2$str = [ 3 123, 4 'abc', 5 45, 6 67, 7 ]; 8$s = sprintf('%d%s%d %d',$str[0],$str[1],$str[2],$str[3]); 9// $s = '123abc45 67'; 10$n = sscanf($s,'%3d%3s%2d %2d',$t[0],$t[1],$t[2],$t[3]); 11var_dump($t); 12$n = sscanf($s,'%d%s%d %d',$u[0],$u[1],$u[2],$u[3]); 13var_dump($u); 14 15$tmp = '12 34'; 16$n = sscanf($tmp,'%d %d',$v[0],$v[1]); 17var_dump($v); 18$n = sscanf($tmp,'%1d %d',$w[0],$w[1]); 19var_dump($w);
$t = array(4) { [0]=> int(123) [1]=> string(3) "abc" [2]=> int(45) [3]=> int(67) } $u = array(4) { [0]=> int(123) [1]=> string(5) "abc45" [2]=> int(67) [3]=> NULL } $v = array(2) { [0]=> int(12) [1]=> int(34) } $w = array(2) { [0]=> int(1) [1]=> int(2) }
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2017/08/25 11:10