2013-02-16 42 views
0

說我有一個字符串030512 Jack 25 Male\n030513 David 23 Male\n030514 ...,如何從這個字符串中提取信息作爲PHP中的二維表?在PHP中,如何實現像Java中的StringTokenizer一樣的目的?

在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中執行此操作,或者將這個二維數據插入到Mysql數據庫中是一種好的做法嗎?

回答

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); 
} 

你當然可以在第一個循環執行查詢,而不是如果這就是你想要的。

1

可以使用explode()加上list()

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

編輯:

更新了溶液來校正原始數據結構的誤解。

+0

如果他只有3個元素,它只能以這種方式工作。基於他在代碼之前提供的字符串中的'...',我懷疑他有一個不確定的數量。 – Eric 2013-02-16 00:27:35

+0

@Eric:仔細查看代碼。元素數量有限(其中四個元素,即'id','name','age'和'sex'),這些元素被輸入到構造函數中。 – FtDRbwLXw6 2013-02-16 00:38:36

+0

嗯,是的,在你修改你的答案以包含最初的'explode()'後,它就可以工作。 – Eric 2013-02-16 01:07:42

2

您可以使用爆炸或拆分功能。例如。

$records = explode("\n", $raw_data); 
foreach($record in $records) { 
    $fields = explode(" ", $record); 
    $id = fields[0]; 
    $name = fields[1]; 
    ///.... 
} 
0

你可以做這樣的

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

$array = array_map(function($v) { 
    return explode(' ', $v); 
}, explode("\n", $string)); 
相關問題