<?php
function ReadCSV ($file)
{
    if ((
$handle fopen($file"r")) !== FALSE) {
        
$all_rows = array();
        
$header null;
        while (
$row fgetcsv($handle)) {
            if (
$header === null) {
                
$header $row;
                continue;
            }
            
$all_rows[] = array_combine($header$row);
        }
        return 
$all_rows;
    } else return 
NULL;
}

function 
Lookup ($file$folderName)
{
    if ((
$handle fopen($file"r")) !== FALSE) {
        
$header null;
        while (
$row fgetcsv($handle)) {
            if (
$header === null) {
                
$header $row;
                continue;
            }
            
$vst array_combine($header$row);
            if (
$vst['folder'] == $folderName) return $vst;
        }
        return 
NULL;
    } else return 
NULL;
}

function 
HasAllTags ($vst$requiredTags)
{
    
$tags explode('|'$vst['tags']);
    foreach (
$requiredTags as $tag) if (!in_array($tag$tags)) return FALSE;
    return 
TRUE;
}

function 
HasNoTags ($vst$unwantedTags)
{
    
$tags explode('|'$vst['tags']);
    foreach (
$unwantedTags as $tag) if (in_array($tag$tags)) return FALSE;
    return 
TRUE;
}

function 
Filter ($vstArray$requiredTags$unwantedTags)
{
    
$outArray = array();
    foreach (
$vstArray as $vst)
    {
        if (
HasAllTags($vst$requiredTags) && HasNoTags($vst$unwantedTags))
            
$outArray[] = $vst;
    }
    return 
$outArray;
}
?>