用php之类的数据库读取txt文件

时间:2017-10-15 19:21:08

标签: php arrays

我将我的sql数据库导出到text(database.txt)文件中,如下所示:

id|name_sname|identity|address|region|hours|destination|price;
--------------------------------------------------------------------
1|Ezra Mod|123456789|husi, stanilesti, vaslui|HUSI - IASI|20:00|HUSI|100;
2|Ezra Mod|123456789|husi, stanilesti, vaslui|HUSI - IASI|20:00|HUSI|100;
3|Ezra Mod|123456789|husi, stanilesti, vaslui|HUSI - IASI|20:00|HUSI|100;
4|Ezra Mod|123456789|husi, stanilesti, vaslui|HUSI - IASI|20:00|HUSI|100;
5|Ezra Mod|123456789|husi, stanilesti, vaslui|HUSI - IASI|20:00|HUSI|100;
6|Ezra Mod|123456789|husi, stanilesti, vaslui|HUSI - IASI|20:00|HUSI|100;

现在我想用php读取这个文件并将每行的结果放在另一个文件中:contracts.php?id = 1,其中id需要来自我的 database.txt , 我尝试在这种模式下读取database.txt:

$data = file_get_contents("database.txt"); //read the file
$convert = explode("|", $data); //create array separate by new line

foreach($convert_row as $rand) {
    echo $rand;
    echo "<br /><hr /></br />";
}

在为#34; |&#34;之前/之后为每个值创建变量需要做些什么?每一排?这样的事情: $ id,$ name,....

2 个答案:

答案 0 :(得分:2)

我认为保留数据库对于性能和功能来说都是更好的方法。

您的问题从第二行开始,评论不正确:

$convert = explode("|", $data); //create array separate by new line

这不是新线的分裂。它按|拆分,这会使您的列分开但是无法找到列以此方法结束/启动的位置。您需要拆分新行或使用file()来读取文件。然后,您可以迭代数据并构建变量或数组。

$lines = explode(PHP_EOL, $data);
foreach($lines as $key => $line){
    $convert = explode("|", $line); //create array separate by new line
    if($key == 0) {
        foreach($convert as $column_name) {
            $columns[] = $column_name;
        }
    }
    if(is_numeric($convert[0])) {
        $data[$columns[0]][] = $convert[0];
    }
}

演示:https://3v4l.org/NIPRE

is_numeric将忽略

  
文件0中的

将是id所以它应该始终是一个整数。

答案 1 :(得分:1)

这是您的数据库样式的解决方案: 实例:https://3v4l.org/Xhr68

   <?php 
$data = file_get_contents("database.txt"); //read the file
$rows = explode("\n", $data); //create array separate by new line
$rows = array_map("trim", $rows); // for removing any unwanted space
$rowCount = count($rows); // Count your database rows

function CountCol($data){
    $col = explode("|", $data);
    return count($col);

}

 // Creating array from our text database
// in our database first two rows are not needed so I am skipig this 
// by using i = 2
// and $rowCount -1 because of our array start from 0 but count start from 1
// adding $id[$i-2] and like other because of we have started our first loop from 2 and I want to 
// create my new array starting from 0 .

 for ($i=2; $i <$rowCount-1 ; $i++) { 
     for ($j=0; $j < CountCol($rows[$i]) ; $j++) { 
         $column = explode("|", $rows[$i]);

         $id[$i-2]  = $column[0];
         $name_sname[$i-2]  = $column[1];
         $identity[$i-2]  = $column[2]; 
         $address[$i-2]  = $column[3];
         $region[$i-2]  = $column[4];
         $hours[$i-2]  = $column[5];
         $destination[$i-2]  = $column[6];
         $price[$i-2]  = $column[7];
     }


 }

 // let's print our data 
 // I am using 3 here because of we have no need first 2 rows and our array start from 0
 for ($i=0; $i < $rowCount-3  ; $i++) { 

            echo "ID: ".$id[$i] ."<br>";
            echo "name_sname: ".$name_sname[$i]."<br>";
            echo "identity: ".$identity[$i] ."<br>";
            echo "address: ".$address[$i] ."<br>";
            echo "region: ".$region[$i] ."<br>";
            echo "hours: ".$hours[$i] ."<br>";
            echo "destination: ".$destination[$i] ."<br>";
            echo "price: ".$price[$i] ."<br>";

 }

 // 
 // get it like below

echo "printing information using id number <br>";

echo $name_sname[1]; // here 1 is row number or id number
echo $name_sname[2]; 
echo "<br>";


 ?>

//但我喜欢创建如下的数据库。这意味着不需要前两行列名和 - 行

1|Ezra Mod1|123456789|husi, stanilesti, vaslui|HUSI - IASI|20:00|HUSI|100;
2|Ezra Mod2|123456789|husi, stanilesti, vaslui|HUSI - IASI|20:00|HUSI|100;
3|Ezra Mod3|123456789|husi, stanilesti, vaslui|HUSI - IASI|20:00|HUSI|100;
4|Ezra Mod4|123456789|husi, stanilesti, vaslui|HUSI - IASI|20:00|HUSI|100;
5|Ezra Mod5|123456789|husi, stanilesti, vaslui|HUSI - IASI|20:00|HUSI|100;
6|Ezra Mod6|123456789|husi, stanilesti, vaslui|HUSI - IASI|20:00|HUSI|100;

如果您创建如下所示的数据库是解决方案。

<?php 
$data = file_get_contents("database.txt"); //read the file
$rows = explode("\n", $data); //create array separate by new line
$rows = array_map("trim", $rows); // for removing any unwanted space
$rowCount = count($rows); // Count your database rows

function CountCol($data){
    $col = explode("|", $data);
    return count($col);
}

 // Creating our array database

 for ($i=0; $i <$rowCount-1 ; $i++) { 
     for ($j=0; $j < CountCol($rows[$i]) ; $j++) { 
         $column = explode("|", $rows[$i]);

         $id[$i]  = $column[0];
         $name_sname[$i]  = $column[1];
         $identity[$i]  = $column[2]; 
         $address[$i]  = $column[3];
         $region[$i]  = $column[4];
         $hours[$i]  = $column[5];
         $destination[$i]  = $column[6];
         $price[$i]  = $column[7];
     }


 }

 // now we have full control and everything dynamic  let's print
 for ($i=0; $i < $rowCount-1  ; $i++) { 

            echo "ID: ".$id[$i] ."<br>";
            echo "name_sname: ".$name_sname[$i]."<br>";
            echo "identity: ".$identity[$i] ."<br>";
            echo "address: ".$address[$i] ."<br>";
            echo "region: ".$region[$i] ."<br>";
            echo "hours: ".$hours[$i] ."<br>";
            echo "destination: ".$destination[$i] ."<br>";
            echo "price: ".$price[$i] ."<br>";

 }

 // 
 // get it like below

echo "Tow number<br>";

echo $name_sname[1]; // here 1 is row number or id number 
echo $name_sname[2]; 

 ?>