2013-04-18 2 views
1

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

У меня есть строки, подобные следующим:

$filename=test1/test.jpeg; 
$filename2=project/test2/test1112.jpeg; 

// The file name length could vary. 

Я хочу, чтобы получить папку, так что значение будет test1 или project/test2

Я попытался

$folder = substr($filename,-4) 

но это статический , Как мне это сделать динамически?

ответ

3

вам нужно использовать dirname функцию РНР

$filename = 'test1/test.jpeg'; 
$filename2 = 'project/test2/test1112.jpeg'; 


var_dump(dirname($filename)); 
var_dump(dirname($filename2)); 
+0

быстро и легко! Спасибо! – FlyingCat

0

Обрати строку, удалите все до первой косой черты, затем переверните ее, чтобы получить оригинал без имени файла.

+2

Разговор о не эффективной. – Kermit

+1

По крайней мере, этот ответ показывает один из способов сделать это. – hakre

1

Вы можете использовать массив разбить строку на/

$file_parts_ary = explode("/", $filename); 

Если последний элемент массива является именем файла, то вы знаете, что все предыдущие являются путем. Вы можете снова объединить их или вытащить один конкретный.

$file_path_ary = array_pop($file_parts_ary); // remove the filename 
$file_path = implode("/", $file_path_ary); // Put the rest of the path back together 
1

PHP имеет функцию strrpos, которая возвращает последнее вхождение элемента в строку. Поэтому после этого вы можете использовать substr ($ strin, 0, strrpos ("/"))

OK?

2

может быть быстрее, чтобы сделать

$folder = substr($filename, 0, strrpos('/')); 
1

Если это специально имена файлов, которые вы ищете, встроенные функции РНР dirname() является probably what you want.

Для получения более общего ответа на поставленный вопрос, вы можете работать в обратном направлении через строку с substr(), пока не достигнете определенного символа.

Вот общие «удалить символы конца строки, пока не достигнет определенного символа» функции:

<?php 

$str = 'This is a few words in some sort of order; it makes some sort of sense.'; 

function find_to_last_char($str, $char) { 
    $reversed_string = strrev($str); 
    $char_pos = strpos($reversed_string, $char); 
    if ($char_pos === false) return $str; // character not present 
    $trim = substr($reversed_string, $char_pos); 
    return strrev($trim); 
} 

echo find_to_last_char($str, ';'); 
1

PHP pathinfo function является то, что вы ищете. Вот пример, основанный на коде:

<?php 
    $filenames = array(
     'test1/test.jpeg', 
     'project/test2/test1112.jpeg' 
    ); 

    foreach ($filenames as $filename) { 
     echo pathinfo($filename, PATHINFO_DIRNAME) . "\n"; 
    } 

в результате:

test1 
    project/test2 
Смежные вопросы