我需要生成一个像这样的字符串Helpers\Name
。
我的$prefix
包含\\
<{1}},$prefix = "Helpers\\";
当我合并下面的字符串时,它返回一个带有双反斜杠的字符串而不是一个!
$what_i_want = $prefix . 'Name'; // return Helpers\\Name
在那个结果之后,我尝试用str_repleca()
和preg_replace()
方法将双反斜杠替换为一个,但它不起作用!
任何解决方案将不胜感激。
更新 这是我在Laravel中的辅助函数,我希望返回我想要的东西:
public static function getModelsClassesByString()
{
$path = app_path();
$models = [];
$prefix = "App\\";
$results = scandir($path);
foreach ($results as $result) {
if ($result === "." or $result === "..") continue;
$filename = $prefix . $result;
$models[] = substr($filename, 0, -4);
}
return $models;
}
函数返回如下:
["App\\Admin", "App\\User",...]
另外,我真的不明白有人忍不住让自己通过投票或破坏者评论来破坏问题和我的需求。
答案 0 :(得分:0)
尝试(from this answer):
$prefix = str_replace("\\\\", "\\", $prefix);
$what_i_want = $prefix . 'Name';
原因是反斜杠是特殊字符,因此需要进行转义。
它只适用于两个反斜杠,并且不会改变发生次数。
答案 1 :(得分:0)
另一个想法是不要在字符串中包含\字符并稍后将其连接起来。
例如
$prefix = "Helpers";
$what_i_want = $prefix ."\\". 'Name';
结果将是“帮助者\姓名”;
答案 2 :(得分:0)
您可以尝试使其简单,不要使用双qoute。
public static function getModelsClassesByString()
{
$path = app_path();
$models = [];
$prefix = "App" . '\\';
$results = scandir($path);
foreach ($results as $result) {
if ($result === "." or $result === "..") continue;
$filename = $prefix . $result;
$models[] = substr($filename, 0, -4);
}
return $models;
}