我有一个功能分开我的文件的内容。示例文件:
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";
上面的脚本通过分隔符(999)使我成为多级数组树和单独的数组,因为在我的文件中有很多数组...当索引有很多值时 - 脚本为他提供了内部树。例如:
Array
(
[0] => Array
(
[001] => 06-001-03-13
[002] => 06447
[003] => F
...
[097] =>
[120] => Array
(
[0] => text1
[1] => text2
)
)
[1] => Array
...
我的问题是: 我在MySQL基础中保存这个大型数组有问题。数组中的每个索引都具有相同的数据库。当相同的索引具有许多值(例如120)时,它可能是内爆的。全心全意地感谢您提供任何形式的帮助...... :(
答案 0 :(得分:1)
创建MySQL表:
CREATE TABLE `czynsz` (
`id` INT NOT NULL ,
`value` VARCHAR( 255 ) NOT NULL
) ENGINE = InnoDB;
ALTER TABLE `czynsz` ADD UNIQUE `unique` ( `id` )
然后使用以下php代码插入数据
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;
}
答案 1 :(得分:1)
使用PHP sledgehammer解决方案......
假设您只想存储数组而不需要查询不同的节点,请使用serialize
函数将数组转换为字符串表示形式。您可以轻松提取数据,然后使用unserialize
取回原始数组。
$s_arr = serialize($my_array);
$my_array = unserialize($s_arr);
如果您需要访问数据库中的节点,那么我认为MySQL不是一个好的解决方案,因为涉及到复杂性。如果您想要一个键值存储,那么您应该查看NoSQL解决方案,例如Redis。