2017-03-22 7 views
0

私はPHP配列に変換したいテキストのブロックを持っています。最終目標は、40年以上のデータをMySQLデータベースにできるだけ早く入力することです。フォーマットされたテキストのブロックをPHP配列に変換

(1) FRANK SINATRA – Strangers In The Night (and charts) 
(4) THE MERSEYS – Sorrow 
(19) PAUL & BARRY RYAN – I Love Her 
(NEW) EDDY ARNOLD – I Want To Go With You 

理想的には、データを次の配列に解析してデータを処理できる場合は理想的です。どのようにこれを行うにはどのようなアイデア?私はpreg_splitの使用を考えました。誰か他のアイデアはありますか?

$chartpos[] = "1" 
$artist[] = "FRANK SINATRA" 
$track[] = "Strangers In The Night" 
$performancetype[] = "and charts"` 
+1

'preg_match_all()'を使用してください。 – Barmar

+1

多くの曲名に括弧が含まれています。あなたは、タイトルの一部である括弧とパフォーマンスタイプを保持する括弧とを区別するのに苦労するでしょう。 – Barmar

答えて

1

は、この正規表現は、あなたに$での配列になるだろうが「ID」の要素とあれば、すべての対応する位置を含む「名前」要素と一致しますあなたのフォーマットを正しく理解しました。

$a = "(1) FRANK SINATRA – Strangers In The Night (and charts) 
(4) THE MERSEYS – Sorrow 
(19) PAUL & BARRY RYAN – I Love Her 
(NEW) EDDY ARNOLD – I Want To Go With You"; 

preg_match_all('/\((?<id>[0-9]|NEW)\) (?<name>.*)/', $a, $matches); 
print_r($matches); 
0

これはあなたを助ける...

$re = '/\(([0-9NEW]+)\)\s+([A-Z& ]+) – (.*)/m'; 
$str = '(1) FRANK SINATRA – Strangers In The Night (and charts) 
(4) THE MERSEYS – Sorrow 
(19) PAUL & BARRY RYAN – I Love Her 
(NEW) EDDY ARNOLD – I Want To Go With You'; 

preg_match_all($re, $str, $matches, PREG_SET_ORDER, 0); 

// Print the entire match result 
var_dump($matches); 
関連する問題