需要 SimpleXML 帮助
SimpleXML Help Needed
我能够解析我想要的数据,但我在尝试按照我想要的方式格式化数据时遇到问题。
XML数据:
<home>
<data number="1" name="John" color="Red"/>
<data number="2" name="Jim" color="Blue"/>
<data number="3" name"Bob" color="Black"/>
</home>
PHP代码:
foreach ($xml->home->data as $info){
$number = $info['number'];
$name = $info['name'];
$color = $info['color'];
mysql insert into database code here
}
所以从这里开始,我想做的是将每个条目合并到一个变量中,这样我就可以将它插入到我的数据库中。
我想将其插入数据库,如下所示:
1. John(Red)
2. Jim(Blue)
3. Bob(Black)
然后像这样插入一个 entry/row 而不是为找到的每个 XML 数据插入每一行 separately/new 行。(希望这是有意义的)
请求的解决方案
$str = "";
foreach ($xml->home->data as $info){
$str .= $info['number'] . " " . $info['name']. "(".$info['color'].") ";
}
//insert into database using whatever method you're using. i.e. PDO.
备选方案
好吧,你为什么不把它全部放入一个数组中,序列化它(以备将来使用)然后 base64_encode 使其成为数据库安全的?我知道你并没有特别要求这个,但这绝对是一个更好的解决方案。
$insert = array();
foreach ($xml->home->data as $info){
$insert[$info['number']] = $info['name']."(".$info['color'].")";
$insert = base64_encode(serialize($insert));
}
//insert into database using whatever method you're using. i.e. PDO.
您还可以使用:
$insert[] = array("id" => $info['number'], "name" => $info['name'], "colour" = > $info['color']);
在这种情况下,您可以通过数组进行交互以更轻松地进行搜索,但无法通过他们的 ID 访问特定人员,如果您愿意,请使用此:
$insert[$info['number']] = array("name" => $info['name'], "colour" = > $info['color']);
通过这种方式,您可以将所有数据从数据库中提取出来,并像这样解码和反序列化:
seralize(base64_decode($array));
并通过索引按 ID 访问每个用户,例如(在第一种情况下),$array[1]
将包含:John(Red)
对于第二个例子,使用$array[0]
得到John(Red)
,在第三个例子中,你可以再次使用array[1]
。
我认为你可以:
- 写一个 SQL 并执行插入
- 创建一个包含 2 个变量(名称和颜色)的存储过程。
我更喜欢使用存储过程,因为它可以节省数据库解释 SQL 所需的时间,因为它已经知道它应该做什么。
我会创建一个具有以下规格的 table:
CREATE TABLE DATA (
id_name VARCHAR,
color VARCHAR,
PRIMARY KEY (id_name))
然后写一个存储过程调用:
CREATE PROCEDURE storeKeys(IN var_name VARCHAR, IN var_color VARCHAR)
BEGIN INSERT INTO data(id_name, color) VALUES(@var_name, @var_color);
然后从 PHP 循环中调用它并设置变量。
作为指南:http://php.net/manual/en/mysqli.quickstart.stored-procedures.php
如果您有大量数据要处理,您可以通过创建一批查询来提高性能。
希望对您有所帮助
我能够解析我想要的数据,但我在尝试按照我想要的方式格式化数据时遇到问题。
XML数据:
<home>
<data number="1" name="John" color="Red"/>
<data number="2" name="Jim" color="Blue"/>
<data number="3" name"Bob" color="Black"/>
</home>
PHP代码:
foreach ($xml->home->data as $info){
$number = $info['number'];
$name = $info['name'];
$color = $info['color'];
mysql insert into database code here
}
所以从这里开始,我想做的是将每个条目合并到一个变量中,这样我就可以将它插入到我的数据库中。
我想将其插入数据库,如下所示:
1. John(Red)
2. Jim(Blue)
3. Bob(Black)
然后像这样插入一个 entry/row 而不是为找到的每个 XML 数据插入每一行 separately/new 行。(希望这是有意义的)
请求的解决方案
$str = "";
foreach ($xml->home->data as $info){
$str .= $info['number'] . " " . $info['name']. "(".$info['color'].") ";
}
//insert into database using whatever method you're using. i.e. PDO.
备选方案
好吧,你为什么不把它全部放入一个数组中,序列化它(以备将来使用)然后 base64_encode 使其成为数据库安全的?我知道你并没有特别要求这个,但这绝对是一个更好的解决方案。
$insert = array();
foreach ($xml->home->data as $info){
$insert[$info['number']] = $info['name']."(".$info['color'].")";
$insert = base64_encode(serialize($insert));
}
//insert into database using whatever method you're using. i.e. PDO.
您还可以使用:
$insert[] = array("id" => $info['number'], "name" => $info['name'], "colour" = > $info['color']);
在这种情况下,您可以通过数组进行交互以更轻松地进行搜索,但无法通过他们的 ID 访问特定人员,如果您愿意,请使用此:
$insert[$info['number']] = array("name" => $info['name'], "colour" = > $info['color']);
通过这种方式,您可以将所有数据从数据库中提取出来,并像这样解码和反序列化:
seralize(base64_decode($array));
并通过索引按 ID 访问每个用户,例如(在第一种情况下),$array[1]
将包含:John(Red)
对于第二个例子,使用$array[0]
得到John(Red)
,在第三个例子中,你可以再次使用array[1]
。
我认为你可以:
- 写一个 SQL 并执行插入
- 创建一个包含 2 个变量(名称和颜色)的存储过程。
我更喜欢使用存储过程,因为它可以节省数据库解释 SQL 所需的时间,因为它已经知道它应该做什么。
我会创建一个具有以下规格的 table:
CREATE TABLE DATA (
id_name VARCHAR,
color VARCHAR,
PRIMARY KEY (id_name))
然后写一个存储过程调用:
CREATE PROCEDURE storeKeys(IN var_name VARCHAR, IN var_color VARCHAR)
BEGIN INSERT INTO data(id_name, color) VALUES(@var_name, @var_color);
然后从 PHP 循环中调用它并设置变量。
作为指南:http://php.net/manual/en/mysqli.quickstart.stored-procedures.php
如果您有大量数据要处理,您可以通过创建一批查询来提高性能。
希望对您有所帮助