0

String がある030512 Jack 25 Male\n030513 David 23 Male\n030514 ...とします。この String から情報を PHP の 2 次元テーブルとして抽出する方法を教えてください。

Java では、次StringTokenizerのように使用できます。

StringTokenizer lineTokenizer = new StringTokenizer("030512 Jack ...", "\n");
List<Student> students = new ArrayList<Student>();

while(lineTokenizer.hasMoreTokens()) {
    String line = lineTokenizer.nextToken();
    StringTokenizer itemTokenizer = new StringTokenizer(line, " ");
    String id = itemTokenizer.nextToken();
    String name = itemTokenizer.nextToken();
    String age = itemTokenizer.nextToken();
    String sext = itemTokenizer.nextToken();
    students.add(new Student(id, name, age, sex));
}

実際、私の最終的な目標は、この「テーブルのような」情報を抽出して Mysql データベースに保存することです。

私は PHP に詳しくありません。PHP でこれを行う方法を教えてもらえますか、またはこの 2 次元データ挿入を Mysql データベースに実装するための良い方法は何ですか?

4

4 に答える 4

2

分解または分割機能を使用できます。例えば

$records = explode("\n", $raw_data);
foreach($record in $records) {
    $fields = explode(" ", $record);
    $id = fields[0];
    $name = fields[1];
    ///....
}
于 2013-02-16T00:25:17.720 に答える
1

派手ではありませんが、私の意見では理解しやすいです(ただし、文字列が改行で終わっていないこと、および情報が常に正しくフォーマットされている必要があります):

$students = array();

//no newline at the end, or you'll have to add a check for that in the loop.
$str = "030512 Jack 25 Male\n030513 David 23 Male";

foreach(explode("\n", $str) as $student_str) {
    list($id, $name, $age, $sex) = explode(" ", $student_str);
    array_push($students, array(":id"=>$id,":name"=>$name, ":age"=>$age, ":sex"=>$sex));
}

//For the DB part which has been quite absent.
$conn = new PDO("mysql:host=$dbhost;dbname=$dbname",$dbuser,$dbpass);
$query = "INSERT INTO students (id, name, age, sex) VALUES (:id, :name, :age, :sex)";
$prepared_query = $conn->prepare($query);

foreach($students as $student) {
    $prepared_query->execute($student);
}

もちろん、必要に応じて、代わりに最初のループでクエリを実行することもできます。

于 2013-02-16T00:37:37.593 に答える
1

explode()と組み合わせて使用​​できますlist()

foreach (explode("\n", $yourString) as $line) {
    list($id, $name, $age, $sex) = explode(' ', $line);
    // ...
}

編集:

元のデータ構造の誤解を修正するためにソリューションを更新しました。

于 2013-02-16T00:24:02.880 に答える
0

あなたはこのようにすることができます

$string = "030512 Jack 25 Male\n030513 David 23 Male\n030514";

$array = array_map(function($v) {
    return explode(' ', $v);
}, explode("\n", $string));
于 2013-02-16T00:27:35.187 に答える