Php 将多个多级数组插入mysql base
我有一个分离文件内容的函数。示例文件:Php 将多个多级数组插入mysql base,php,mysql,Php,Mysql,我有一个分离文件内容的函数。示例文件: 001;"text1" 002;"text2" 003;"text3" 999 001;"tekst11" 有时某些索引有几个值: 120;"text2" 120;"text3" 我的职能: function parseCSV($file) { $lines = file($file); $output = array(); $i = -1; foreach($lines as $line) { $line = tr
001;"text1"
002;"text2"
003;"text3"
999
001;"tekst11"
有时某些索引有几个值:
120;"text2"
120;"text3"
我的职能:
function parseCSV($file) {
$lines = file($file);
$output = array();
$i = -1;
foreach($lines as $line) {
$line = trim($line);
if($line == "999") {
$i++;
} else {
$ex = explode(";", $line, 2);
$val = str_replace("\"", "", $ex[1]);
//$dodaj = mysql_query("INSERT INTO `czynsz` (`$ex[$i]`) VALUES ('$val')");
if(isset($output[$i][$ex[0]])) {
if(is_array($output[$i][$ex[0]])) {
$output[$i][$ex[0]][] = $val;
} else {
$output[$i][$ex[0]] = array($output[$i][$ex[0]], $val);
}
} else {
$output[$i][$ex[0]] = $val;
}
$dodaj = mysql_query("INSERT INTO `czynsz` (`$ex[$i]`) VALUES ('$val')");
}
}
return $output;
}
$csvdata = parseCSV("woda.txt");
echo "<pre>\r\n";
print_r($csvdata);
echo "</pre>\r\n";
还有我的问题:
我在MySQL数据库中保存这个超级数组时遇到问题。数组中的每个索引在数据库中都有相同的索引。当同一个索引有许多值(例如120)时,它可能会内爆。衷心感谢您的帮助……:(创建一个MySQL表:
ini_set('error_reporting', E_ALL); // just for debugging remove later
ini_set('display_erorrs', 1); // just for debugging remove later
function parseCSV($file) {
$lines = file($file);
$output = array();
$i = 0;
foreach($lines as $line) {
$line = trim($line);
if($line == "999") {
$i++;
continue;
}
list($id, $val) = explode(";", $line, 2);
$val = str_replace("\"", "", $val);
$result = mysql_query("
INSERT INTO `czynsz` (
id,
`value`
) VALUES (
'$id',
'$val'
) ON DUPLICATE KEY UPDATE
`value` = CONCAT(`value`, ', ', '$val')"
);
if(!$result) {
die(mysql_error());
}
if(isset($output[$i][$id])) {
if(is_array($output[$i][$id])) {
$output[$i][$id][] = $val;
} else {
$output[$i][$id] = array($output[$i][$id], $val);
}
} else {
$output[$i][$id] = $val;
}
}
return $output;
}
然后使用以下php代码插入数据
$s_arr = serialize($my_array);
$my_array = unserialize($s_arr);
使用PHP大锤解决方案 假设您只想存储数组,不需要查询不同的节点,请使用
序列化
函数将数组转换为字符串表示形式。您可以轻松地提取数据,然后使用取消序列化
返回原始数组
如果您需要访问数据库中的节点,那么我认为MySQL不是一个好的解决方案,因为它涉及的复杂性。如果您想要一个键值存储,那么您应该考虑一个NoSQL解决方案,例如。MySQL-扩展已经过时,它的使用非常不受欢迎,并且它将被upcom标记为不推荐使用ing PHP5.5.使用
MySQLi
,或PDO_MYSQL
来代替。请看通知,为什么要在999上创建一个新的数组索引?@hek2mgl这是某种神奇的常量,我猜请给我们看看表的结构psst的转储,test。czynsz
表示数据库test
和表czynsz
请检查我所做的更新!当然,您必须在sql中使用CONCAT。是否需要$output
数组进行进一步处理?否则我将删除它。您会遇到什么错误?可以设置ini\u set('display\u errors',1);
?如果在$line=trim($line)之后添加echo$line;
。它说了什么?为什么不呢?就我个人而言,我会使用json_encode(),因为它更易于阅读,而且我知道它的速度要快一点,但是如果他只是想要回数据,并且没有(正如Ian警告的那样)尝试对节点进行查询,那么序列化可能比拥有x行快得多。许多数据库正在朝着类似的方向发展(例如Mongo)@GabrielSantos你只会“想”所以——这值得投反对票吗?OP的问题中除了存储数据外,没有任何建议如何在数据库中使用数据。OP的所有者想要一种键值方法。而且,如果我有一百万个索引,如何进行快速搜索?@GabrielSantos保佑你的棉袜……但有人这样做了……他们没有留下评论!Grrr!:)到目前为止,有两个人投了你的反对票(一人投了赞成票),所以我认为他们也不喜欢你的方法。
ini_set('error_reporting', E_ALL); // just for debugging remove later
ini_set('display_erorrs', 1); // just for debugging remove later
function parseCSV($file) {
$lines = file($file);
$output = array();
$i = 0;
foreach($lines as $line) {
$line = trim($line);
if($line == "999") {
$i++;
continue;
}
list($id, $val) = explode(";", $line, 2);
$val = str_replace("\"", "", $val);
$result = mysql_query("
INSERT INTO `czynsz` (
id,
`value`
) VALUES (
'$id',
'$val'
) ON DUPLICATE KEY UPDATE
`value` = CONCAT(`value`, ', ', '$val')"
);
if(!$result) {
die(mysql_error());
}
if(isset($output[$i][$id])) {
if(is_array($output[$i][$id])) {
$output[$i][$id][] = $val;
} else {
$output[$i][$id] = array($output[$i][$id], $val);
}
} else {
$output[$i][$id] = $val;
}
}
return $output;
}
$s_arr = serialize($my_array);
$my_array = unserialize($s_arr);