Как преобразовать двойной обратный слеш в строке в один обратный слеш в PHP? - PullRequest
0 голосов
/ 11 июня 2018

Мне нужно, чтобы сгенерировать строку, подобную этой, Helpers\Name.

У меня есть $prefix, которая содержит \\, как $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",...]

Кроме того, я действительно не понимаю кого-то, кто не мог помочь, но позволил себе уничтожить вопрос и мои нужды путем отрицательных голосов или комментариев деструкторов.

Ответы [ 3 ]

0 голосов
/ 11 июня 2018

Другая идея - не включать в свои строки символ \ и не использовать его позже.

Например.

$prefix = "Helpers";
$what_i_want = $prefix ."\\". 'Name';

Результатом будет "Помощники \ Имя";

0 голосов
/ 11 июня 2018

Вы можете попытаться упростить это, вот так, не используйте двойной 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;

}
0 голосов
/ 11 июня 2018

Попробуйте ( из этого ответа ):

$prefix = str_replace("\\\\", "\\", $prefix);
$what_i_want = $prefix . 'Name';

Причина в том, что обратные слэши являются специальными символами, поэтому их необходимо экранировать.

Это будет работать только дляхотя есть две обратные косые черты и количество событий не различается.

...