我正在尝试从字符串末尾删除字母,直到字符串以某些字符结尾。
我有如下字符串:
$filename=test1/test.jpeg;
$filename2=project/test2/test1112.jpeg;
// The file name length could vary.
我想获取文件夹,因此值将是test1
或project/test2
我努力了
$folder = substr($filename,-4)
但那是静态的。我如何动态地做到这一点?
我正在尝试从字符串末尾删除字母,直到字符串以某些字符结尾。
我有如下字符串:
$filename=test1/test.jpeg;
$filename2=project/test2/test1112.jpeg;
// The file name length could vary.
我想获取文件夹,因此值将是test1
或project/test2
我努力了
$folder = substr($filename,-4)
但那是静态的。我如何动态地做到这一点?
你需要使用 php 的dirname函数
$filename = 'test1/test.jpeg';
$filename2 = 'project/test2/test1112.jpeg';
var_dump(dirname($filename));
var_dump(dirname($filename2));
可能会更快
$folder = substr($filename, 0, strrpos('/'));
如果它是您要查找的特定文件名,那么 PHP 的内置函数可能dirname()
就是您想要的。
对于所提出的问题的更通用的答案,当然可以通过字符串向后工作,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, ';');
您可以使用数组通过 / 分割字符串
$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
PHP pathinfo 函数是您正在寻找的。这是基于您的代码的示例:
<?php
$filenames = array(
'test1/test.jpeg',
'project/test2/test1112.jpeg'
);
foreach ($filenames as $filename) {
echo pathinfo($filename, PATHINFO_DIRNAME) . "\n";
}
导致:
test1
project/test2
PHP 有一个名为 strrpos 的函数,它返回字符串中元素的最后一次出现。所以在那之后你可以使用 substr($strin,0,strrpos("/"))
好的?
反转字符串,删除第一个斜杠之前的所有内容,然后重新反转它以获得没有文件名的原始字符串。