【问题标题】:What is the function that will truncate string in an array?将截断数组中的字符串的函数是什么?
【发布时间】:2011-11-14 01:10:17
【问题描述】:

我还是 PHP 新手,我在手册中找不到这个,因为我不确定函数的名称。我有一个包含这些值的数组:

$files[] = 

[0] => 01_Nhemamusasa.mp3 
[1] => 02_Kari_Mudande.mp3 
[2] => 03_Chikende.mp3 
[3] => 04_Karinge_Zuva.mp3 
[4] => 05_Mbirimo.mp3 
[5] => 06_Muchenjedza_Mutonga.mp3 
[6] => 07_Skokianna.mp3 
[7] => 08_Mbavarira.mp3

我需要做的是截断内容以删除 _ 之前的部分并删除文件类型。我还想将数组 [1] 和 [5](在本例中)中间的下划线转换为空格。换句话说,我需要将这些文件名转换为歌曲实际名称的数组。

感谢您的帮助!

编辑:我的主机使用的是 PHP 5.2.12

【问题讨论】:

    标签: php arrays


    【解决方案1】:

    结合使用array_map()、preg_replace()和str_replace():

    $array = array(...);
    
    $array = array_map(function($item) {
        return str_replace('_', ' ', preg_replace('#^\d+_(.*?)\.[a-z0-9]{2,6}$#i', '$1', $item));
    }, $array);
    
    print_r($array);
    

    【讨论】:

    • 需要注意的是这个需要PHP5.3+
    【解决方案2】:

    您将需要使用 array_walk 函数:http://us3.php.net/array_walk 如果您使用的是 PHP 5.3,则可以将 array_walk 传递给匿名函数。

    编辑:array_map 也可以解决问题。关于匿名函数的相同建议也适用于此。

    【讨论】:

    • 在使用create_function时,您可以在 PHP
    • @Gordon:这当然是真的,既然你提出来了,还应该注意关于 create_function 的警告是你最终可能会转义代码。许多开发人员觉得这很难看,宁愿编写一次性的类/方法并通过数组 [array('class', 'method')] 传递它。
    • 是的,create_function 不好看,而且速度也很慢。
    【解决方案3】:
    $input = array(
        '01_Nhemamusasa.mp3',
        '02_Kari_Mudande.mp3',
        '03_Chikende.mp3',
        '04_Karinge_Zuva.mp3',
        '05_Mbirimo.mp3',
        '06_Muchenjedza_Mutonga.mp3',
        '07_Skokianna.mp3',
        '08_Mbavarira.mp3'
    );
    
    function convert($item) {
        $item = explode('_', $item);
        unset($item[0]);
        $item = implode('_', $item);
        $item = explode('.', $item);
        $item = str_replace('_', ' ', $item[0]);
        return $item;
    }
    
    $output = array_map('convert', $input);
    
    print_r($output);
    

    输出:

    Array
    (
        [0] => Nhemamusasa
        [1] => Kari Mudande
        [2] => Chikende
        [3] => Karinge Zuva
        [4] => Mbirimo
        [5] => Muchenjedza Mutonga
        [6] => Skokianna
        [7] => Mbavarira
    )
    

    【讨论】:

    • 需要注意的是这个需要PHP5.3+
    • 看起来不错,但我的主机运行的是 5.2.12 :(
    • @Gordon 我认为内联函数是使它需要 5.3+ 的部分? @Joel 我修改了代码以不使用内联函数,所以你现在应该可以使用它了。
    • 谢谢爱德华!会试一试。感谢您的帮助!
    【解决方案4】:

    两个 php 字符串替换函数 (str/preg_replace) 都接受数组作为“主题”参数:

    $files = preg_replace('~^\d+ (.+?)\..+$~', '$1', 
        str_replace('_', ' ', $files));
    

    【讨论】:

      【解决方案5】:

      您可以使用foreach 迭代数组并使用substr 删除前三个字符,同样删除最后四个或每个字符串。

      之后,您可以使用str_replace 将下划线更改为空格。

      【讨论】:

        猜你喜欢
        • 2015-04-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-11-30
        • 1970-01-01
        • 1970-01-01
        • 2018-03-01
        相关资源
        最近更新 更多