Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- // gedcom reader
- // based on GEDCOM files from Aldfaer
- // door : Svenn D'Hert - 06/jan/2012
- // http://wwww.svennd.be
- // het gedcom file (vb : mijnfamilie.ged)
- $gedcom_file = "";
- // check if file exist
- if ( file_exists ($gedcom_file) )
- {
- // lees het bestand in (als array)
- $gedcom_read = file($gedcom_file, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
- $amount_of_lines = count ($gedcom_read);
- $final_read = array();
- $level_0 = 0;
- $level_1 = 0;
- $level_2 = 0;
- $level_3 = 0;
- // doorlees de array en maak de lijnen bindend aan hun indent level aangegeven door gedcom
- for ( $i = 0; $i < $amount_of_lines; $i++)
- {
- // indien het niet gaat om lege regels
- // split/expode dan de lijn op basis van spatie
- if ( !empty($gedcom_read[$i]))
- $split_line = clean_split($gedcom_read[$i]);
- // nieuwe entititeit (HEAD en TRLR worden niet uitgefilterd)
- if ($split_line['indent'] == 0)
- {
- $level_0++;
- $final_read[$level_0] = array('name' => $split_line['name']);
- }
- // level 1 indent
- else if ($split_line['indent'] == 1)
- {
- $level_1 = $split_line['name'];
- // indien de volgende lijn een "kind" (indent++) is
- // gebruik dan een array om de kinderen op te slaan.
- if (is_next_line_child($i, $gedcom_read, 1))
- {
- $final_read[$level_0][$level_1] = ($split_line['value']) ? array($split_line['name'] => $split_line['value']) : array();
- }
- else
- {
- $final_read[$level_0][$level_1] = $split_line['value'];
- }
- }
- // level 2 indent
- else if ($split_line['indent'] == 2)
- {
- $level_2 = $split_line['name'];
- if (is_next_line_child($i, $gedcom_read, 2))
- {
- $final_read[$level_0][$level_1][$level_2] = ($split_line['value']) ? array($split_line['name'] => $split_line['value']) : array();
- }
- else
- {
- $final_read[$level_0][$level_1][$level_2] = $split_line['value'];
- }
- }
- // level 3 indent
- else if ($split_line['indent'] == 3)
- {
- $level_3 = $split_line['name'];
- $final_read[$level_0][$level_1][$level_2][$level_3] = ($split_line['value']) ? array($split_line['name'] => $split_line['value']) : array();
- if (is_next_line_child($i, $gedcom_read, 3))
- {
- $final_read[$level_0][$level_1][$level_2][$level_3] = array($split_line['name'] => $split_line['value']);
- }
- else
- {
- $final_read[$level_0][$level_1][$level_2][$level_3] = $split_line['value'];
- }
- }
- }
- }
- // functie die kijkt of de volgende lijn een hogere indent heeft
- // deze functie is optioneel
- // u kunt deze "verwijderen" door
- // de return lijn te veranderen naar :
- // return true;
- function is_next_line_child($i, $gedcom_read, $indent)
- {
- $line = clean_split($gedcom_read[$i+1]);
- return ($line['indent'] > $indent) ? true : false;
- }
- // splits de lijn in 2/3 delen
- // [indent][name][value(opt)]
- function clean_split($line)
- {
- $line = explode(" ", trim($line), 3);
- return array(
- 'indent' => $line[0],
- 'name' => htmlspecialchars($line[1]),
- 'value' => ((isset($line[2])) ? $line[2] : false)
- );
- }
- // output
- print_r($final_read);
- ?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement