$pgas) {
$invert_matrix = array();
foreach ($pgas as $line_number => $line_content) {
foreach ($line_content as $column_number => $column_content) {
$invert_matrix[$line_number][$column_headers[$file_name][$column_number]] = $column_content;
}
}
$all_tables_inverted[$file_name] = $invert_matrix;
}
// Comparison algorithm
$counter = 0;
$basic_matrix = array();
$new_key = generate_new_key($all_tables_inverted);
// Merge every matrices to the others still merged
foreach ($all_tables_inverted as $file_name => $lines) {
if ($counter == 0) {
// First matrix
$basic_matrix[$file_name] = $lines;
} else {
// 2nd+ matrices
$tmp_matrix = array();
// for each line in secondary matrix
foreach ($lines as $line_number => $entry) {
// Set exists flag
$entry_exists = FALSE;
// Generate array of search keys
$secondary_entry_searcharray = explode(";", $entry[$access_key]);
// for each column in basic matrix
foreach ($basic_matrix as $basic_file_name => $basic_lines) {
// for each line in basic matrix
foreach ($basic_lines as $basic_line_number => $basic_entry) {
// Generate array of search keys
$basic_entry_searcharray = explode(";", $basic_entry[$access_key]);
// Main comparison of access keys
if (count(array_intersect($secondary_entry_searcharray, $basic_entry_searcharray)) > 0) {
// entry already exists
if (count(array_diff($tmp_matrix[$file_name][$basic_line_number], $entry)) > 0) {
echo("Entry already in array
");
echo("Replicate match from ". $file_name ." to ". $basic_file_name ."
");
echo("Line number: ". $line_number ."/". $basic_line_number ."
");
echo("Gene name: ". $entry["Gene names"] ."
");
echo("Gene name (". $basic_file_name ."): ". $basic_entry["Gene names"] ."
");
echo("Former gene name: ". $tmp_matrix[$file_name][$basic_line_number]["Gene names"] ."
");
}
// Assign entry to temporary matrix
$tmp_matrix[$file_name][$basic_line_number] = $entry;
$entry_exists = TRUE;
}
}
}
if (!$entry_exists) {
$tmp_matrix[$file_name][$new_key] = $entry;
$new_key++;
}
}
// Assign temporary matrix to basic matrix
foreach ($tmp_matrix as $file_name => $lines ){
foreach ($lines as $line_number => $entry) {
$basic_matrix[$file_name][$line_number] = $entry;
}
}
unset($tmp_matrix);
}
$counter++;
}
// Output in csv file
// Create merge file
if ($write_output) {
$merge_csv = fopen($merge_file_name, "w");
// Write column headers
$line = array();
foreach ($basic_matrix as $file_name => $content) {
foreach ($column_headers[$file_name] as $column_name) {
$line[] = $file_name ."_". $column_name;
}
}
fputcsv($merge_csv, $line);
// Write data
$max_line = $new_key - 1;
for ($i = 1; $i <= $max_line; $i++) {
$line = array();
foreach ($basic_matrix as $basic_file_name => $basic_lines) {
if (array_key_exists($i, $basic_lines)) {
foreach ($column_headers[$basic_file_name] as $column_header) {
$line[] = $basic_lines[$i][$column_header];
}
} else {
foreach ($column_headers[$basic_file_name] as $column_header) {
$line[] = "-";
}
}
}
fputcsv($merge_csv, $line);
}
// Close file
fclose($merge_csv);
// Screen read-out
echo("
"); print_r($basic_matrix); echo(""); } echo("---FINISHED---") ?>