需要SimpleXML帮助

时间:2016-04-14 18:32:43

标签: php simplexml

我能够解析我想要的数据,但是我在尝试按照我想要的方式格式化数据时遇到了问题。

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)

将其插入就像一个条目/行而不是单独插入每行/每个XML数据的新行。(希望这是有道理的)

2 个答案:

答案 0 :(得分:0)

请求解决方案

$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]

答案 1 :(得分:0)

我看到你的方式你可以:
- 写一个SQL&amp;执行插入
- 使用2个变量(名称和颜色)创建存储过程。

我更喜欢使用存储过程,因为它为数据库节省了解释SQL所需的时间,因为它已经知道它应该做什么。

我会创建一个包含以下规格的表格:

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

如果要处理大量数据,可以通过创建一批查询来提高性能。

我希望这会有所帮助