2

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

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

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

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

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

4

4 回答 4

7

如果您使用文件名,请使用 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
)
于 2012-11-17T23:19:37.367 回答
2

正则表达式是你的朋友。我假设括号,你的意思是一个数组。

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

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

于 2012-11-17T23:19:53.473 回答
2

使用preg_splitforeach

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

将正则表达式更改为也/[^.]+/包括在内a.b.jpg

于 2012-11-17T23:20:18.037 回答
-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>";
于 2017-04-24T08:52:30.257 回答