任何人都可以提供以下帮助。我在mysql表中有一个字段“notes”,但需要将它分成一个新表。
该说明目前采用以下格式:
在2012年10月22日下午3:50由username1添加
说明就在这里
在20/10/2012 12:29 pm上由username2添加
说明就在这里等等
这里有2个注释作为例子。我怎样才能将它变成一个数组:
[0] => Array(
[0] username1
[1] 22/10/2012 3:50pm
[2] Note1
)
[1] => Array(
[0] username2
[1] 20/10/2012 12:29pm
[2] Note2
)
我尝试使用preg_split,但只返回注释,如果按“由日期时间的用户名添加”拆分,因为我不能单独使用“添加”来拆分它,因为注释本身可能包含“添加者”
最好的方法是什么?
由于
答案 0 :(得分:2)
试试这个
// Get the data from the database
$myData = $row['notes'];
// Split this into an array
$data = explode("\r\n", $myData);
// $data has each line as an element of the array
$key = -1;
$final = array();
foreach ($data as $element)
{
// Check if this is the first row
if (strpos($element, "Added by") > 0)
{
$key = $key + 1;
// This is the first header row. Get the info from it
$tmp = str_replace("Added by", "", $element);
$parts = explode(" on ", $tmp)
// Add them to the final array
// Username
$final[$key][0] = trim($parts[0]);
// Date
$final[$key][1] = trim($parts[1]);
// Initialize the note element
$final[$key][2] = '';
}
else
{
// We don't have the 'Added On' so add this as a note.
$final[$key][2] .= $element;
}
}
这应该为您提供工作基础。您还可以在备注元素$final[$key][2] .= $element;
答案 1 :(得分:0)
可能你最好的选择是将该字段划分为一系列行,然后遍历每一行。如果你点击一个看起来像Added
行的那个,你就有了一个新记录,那么每个后续行都是该记录的一部分......直到你按另一个按行添加。
e.g。
$lines = array(... your monolithic text here ...);
$idx = 0;
$notes = array();
foreach($lines as $line) {
if (preg_match('/^Added by (.*?) on (.*?)$/', $matches)) {
$notes[$idx] = array(
0 => $matches[1], // username
1 => $matches[2], // date/time
2 => '' // note text
)
continue;
}
$notes[$idx[2]] .= $line;
}