1

我正在尝试从字符串末尾删除字母,直到字符串以某些字符结尾。

我有如下字符串:

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

// The file name length could vary. 

我想获取文件夹,因此值将是test1project/test2

我努力了

$folder = substr($filename,-4)

但那是静态的。我如何动态地做到这一点?

4

7 回答 7

3

你需要使用 php 的dirname函数

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


var_dump(dirname($filename));
var_dump(dirname($filename2));
于 2013-04-18T22:52:02.750 回答
2

可能会更快

$folder = substr($filename, 0, strrpos('/'));
于 2013-04-18T22:51:52.310 回答
2

如果它是您要查找的特定文件名,那么 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, ';');
于 2013-04-18T22:52:20.823 回答
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
于 2013-04-18T22:49:57.367 回答
1

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
于 2013-04-18T22:53:53.017 回答
1

PHP 有一个名为 strrpos 的函数,它返回字符串中元素的最后一次出现。所以在那之后你可以使用 substr($strin,0,strrpos("/"))

好的?

于 2013-04-18T22:51:03.233 回答
0

反转字符串,删除第一个斜杠之前的所有内容,然后重新反转它以获得没有文件名的原始字符串。

于 2013-04-18T22:49:41.373 回答