PHP变量在文件名中

3
我进行了快速的谷歌搜索,没有找到任何相关信息,所以我不确定这是否可能。
假设我有一个名为的文件。 是否可以将文件名的一部分用作变量?
例如: type-grayscale在php脚本中变成$type = "grayscale"title-waterfall变成$title = "Waterfall"
基本上,我想在文件名中存储变量和值,并在可能的情况下提取它们。
我知道我可以使用数据库来实现这一点,但我有特定的原因想要尝试这样做。
好的,我的头脑完全空白了,我甚至没有想到文件名只是一个字符串。
通过一些评论的提醒,我想起了这个小细节,并想出了以下方法,虽然它能够工作,但似乎不是最好的方法:
$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;

输出:

类型: 灰度 图片标题: waterfall

每个变量都需要添加类似于 list($title, $titleValue) = explode("-", $title); 这样的新行,这似乎有些过度。


你可能想要谷歌一下“将字符串拆分为变量”。是的,这是可能的。鉴于键值结构,正则表达式最合适。(避免使用explode/strpos函数。) - mario
当然,只需设计一个路由器和相应的模式即可。考虑到URL可以在任何数量的MVC框架中路由到控制器,对吧。那么URL是什么?它只是一个字符串,文件名又是什么?同样也是一个字符串。因此,如果可以将URL(字符串)路由到运行PHP文件(控制器),那么文件名(字符串)也可以。 - ArtisticPhoenix
提到字符串,我想起文件名就是字符串,于是我更新了我的答案并提供了一个可行的示例,但不是最好的。 - Jesse Elser
3个回答

1
我认为可以使用关联数组来实现。
<?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"
?>

3
我很好奇为什么这个工作实例被踩了,因为它是有效的。 - Jesse Elser
我选择了这个答案,因为它很简单。我不需要为每个变量重复编写代码行。 - Jesse Elser

-2

你可以尝试做:

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 );

然后你将得到一个包含分割部分的数组。

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

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

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

结果是:

echo $first will print  $type = grayscale 

echo $second will print $title = whaterfall 

我确定你的意思是 $parts = get_parts( array('-', '_', '-'), $string); - Nikola R.

-4
        $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;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接