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);