文件名中的PHP变量

I did a quick Google search and didn't find anything on this so I'm not entirely sure if this is even possible.

Let's say I have a file with the name of img_type-grayscale_title-waterfall. Is it possible to use parts of the file name as variables?

Like: type-grayscale becoming in a php script $type = "grayscale" and title-waterfall becoming $title = "Waterfall".

Basically I'd like to store variables and values in a filename and extract them if possible.

I know I could use a database for this, but I have reasons for explicitly wanting to try something like this.

Ok so my mind completly drew a blank and I didn't even think about the fact that the file name is nothing more than a string.

With some reminders from some comments I remembered this small detail and came up with the following which works, but doesn't seem to be the best way to do so:

Code:

$data = "img_type-grayscale_title-waterfall";
list($fileType,$type, $title) = explode("_",$data);

list($type, $typeValue) = explode("-", $type);
list($title, $titleValue) = explode("-", $title);

echo "Type: " . $typeValue;
echo " ";
echo "Title: " . $titleValue;

Output:

Type: grayscale Title: waterfall

It just seems a bit excessive to have to add a new line like list($title, $titleValue) = explode("-", $title); for each variable.

I think I would do so with an associative array.

<?php


$filename = 'img_type-grayscale_title-waterfall';
$result = Array();

//let's parse the filename with _ as first level separator and - for second level

$firstlevel = explode ('_', $filename);
foreach ($firstlevel as $secondlevels) {
        $keyvalue = explode ('-', $secondlevels);
        //first the special case of the "img" first token which is the file type and has no value
        if (!isset($keyvalue[1])) { // there is for it a key but no value
            $result['filetype']=$keyvalue[0];
        }
        else {
            $result[$keyvalue[0]]=$keyvalue[1];
        }

}

echo $result['filetype']; //  "img"
echo ' ; ';
echo $result['type']; // "grayscale"
echo ' ; ';
echo $result['title']; // "waterfall"
?>
        $filename = 'img_type-grayscale_title-waterfall';
        $items = explode('_', $filename);
        $vars = explode('-', $items[1]);
        $name = $vars[0];
        $$name = $vars[1];
        echo $type;

        $vars1 = explode('-', $items[2]);
        $name1 = $vars1[0];
        $$name1 = $vars1[1];
        echo $title;

You could try to do:

function get_parts( $delimiters, $string ){
        return explode( chr( 1 ), str_replace( $delimiters, chr( 1 ), $string ) );
    }
    $string = 'img_type-grayscale_title-waterfall';

    $parts = get_parts( array('-', '_', '-' ), $string );

Then you will get an array with the splitted parts.

Array ( 
   [0] => img 
   [1] => type 
   [2] => grayscale 
   [3] => title 
   [4] => waterfall 
);

$first = '$'.$parts[1].' = '.$parts['2'];

$second = '$'.$parts[3].' = '.$parts['4'];

The result is:

echo $first will print  $type = grayscale 

echo $second will print $title = whaterfall