<?php
function filter($array, $filter_elem) {
    return array_filter($array, function ($v) use($filter_elem) {
        return count(array_diff_assoc($filter_elem, $v)) == 0;
    });
}

$array = array(
    '390' => array(
        '0' => 'hammer',
        '1' => 'Properties',
        '2' => 'tools, hammer, properties',
        '3' => false,
        '4' => 'done',
        'png' => array(
            '0' => 'hammer_16x.png',
            '1' => 'hammer_32x.png',
        ),
        'eps' => array(
            '0' => 'hammer_16x.eps',
            '1' => 'hammer_32x.eps',
        ),
        'ico' => array(
            '0' => 'hammer.ico',
        ),
    ),
);

$filter_elem = array(
    '1' => 'Properties',
    '2' => 'tools, hammer, properties',
    '3' => false,
    '4' => 'done',
);

print_r(filter($array, $filter_elem));
