如何从PHP数组中的每个字符串中删除文件扩展名?

时间:2012-11-17 23:16:18

标签: php arrays

我有一个字符串数组,每个字符串包含一个图像文件的名称:

$slike=(1.jpg,253455.jpg,32.jpg,477.jpg);

我想要新的数组,看起来像这样:

$slike=(1,253455,32,477);

如何从此数组中的每个字符串中删除文件扩展名?

4 个答案:

答案 0 :(得分:6)

如果您正在处理文件名,请使用PHP内置的pathinfo()函数。没有必要为此使用正则表达式。

<?php

# your array
$slike = array('1.jpg','253455.jpg','32.jpg','477.jpg');

# if you have PHP >= 5.3, I'd use this
$slike = array_map(function($e){
    return pathinfo($e, PATHINFO_FILENAME);
}, $slike);

# if you have PHP <= 5.2, use this
$slike = array_map('pathinfo', $slike, array_fill(
    0, count($slike), PATHINFO_FILENAME
));

# dump
print_r($slike);    

输出

Array
(
    [0] => 1
    [1] => 253455
    [2] => 32
    [3] => 477
)

答案 1 :(得分:2)

正则表达式是你的朋友。我假设这是一个数组。

$k = count($slike);
for ($i = 0; $i < $k; $i++) {
   $extpos = strrpos($slike[$i],".");
   $slike[$i] = substr($slike[$i],0,$extpos);
}

这不再依赖于正则表达式,并且基准测试比pathinfo()更快。

答案 2 :(得分:2)

preg_split

中使用 foreach
foreach ($slike as &$value) {
    $split = preg_split('/\./', $value);
    $value = $split[0]
}

将正则表达式更改为/[^.]+/以包含a.b.jpg

答案 3 :(得分:-1)

试试这个:

$slike = array('1.jpg','253455.jpg','32.jpg','477.jpg');

$slike = array_map(function($e){
            $e = explode('.', $e);
            return $e[0];
        }, $slike);

echo "<pre>";
print_r($slike);
echo "</pre>";