<?php

$a = array('A[1]', 'B[2]', 'C[2]', 'D[2]');
$b = array('B[3]', 'C[4]', 'E[4]', 'F[2]', 'G[2]');

function extract_filename($value) {
     return substr($value, 0, strpos($value, '['));
}


function map($array) {
    $filenames = array_map('extract_filename', $array);
    return array_combine($filenames, $array);
}

print_r(array_merge(map($a), map($b)));