-2

i export my sql database into text(database.txt) file like this:

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;

and now i want to read this file with php and put result from each row in another files: contracts.php?id=1 , where id need to be from my database.txt , I try to read database.txt in this mode:

$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 />";
}

what need to do for create variables for each value afther/before "|" and each row? something like this: $id, $name,....

EzraMod
  • 17
  • 1
  • 5

3 Answers3

2

I think keeping the database would be a better approach, both for performance and functionality.

Your issue starts at your second line, the comment there is incorrect:

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

That is not splitting by new lines. It is splitting by |s, which breaks your columns apart however it will be impossible to find where a column ended/started with this approach. You need to split on new lines or use file() to read the file. You then can iterate over the data and build your variables or an array.

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

Demo: https://3v4l.org/NIPRE

The is_numeric is to ignore the


in the file 0 will be the id so it should always the an integer.

chris85
  • 23,846
  • 7
  • 34
  • 51
1

here is your solution for your database style: Live Example: 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>";


 ?>

// but I like to create the database like below. That means no need first two line Columns name and - line

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;

if you create the database like this below is the solution.

<?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]; 

 ?>
Himel Rana
  • 666
  • 5
  • 14
0

This is much cleaner...

$data = file_get_contents("app/engine/txtdb/tables/sections.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

 for ($i=0; $i <$rowCount-1 ; $i++) {
    if($i == 0) { 
         $titles = explode("|", $rows[$i]);
    }
 }
  
  $allcols = array();
  
  for ($i=2; $i <$rowCount-1 ; $i++) { 
         $column = explode("|", $rows[$i]);
         $allcols[$i] = $column;
  }
 
 
  $a = 1;
  foreach($allcols as $colarry) {
     $result[$a] = array_combine($titles, $colarry);
     $a++;
   }
   
      echo '<PRE>';
   var_dump($result);
   echo '</pre>';
gabrielkolbe
  • 145
  • 9