2012-11-17 2 views

답변

5

파일 이름을 사용하는 경우 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 
) 
+2

잘못된. basename()은 접미어 매개 변수에 확장이 제공되는 경우에만 확장을 제거합니다. OP가 연장을 미리 알면 작동 할 수 있습니다. –

+1

내 대답은 더 이상'basename'에 달려 있지 않습니다. –

+1

이것은 최선의 답변입니다, txanks –

2

정규 표현식은이 일에 당신의 친구입니다. 나는 브라 커 (brackers)에 의해 배열을 의미한다고 가정합니다.

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

더 이상 정규식에 의존하지 않으며 benchmarks는 pathinfo()보다 빠릅니다. preg_split를 사용

+0

예를 들어 매력은 좋아요, 대괄호는 배열 이었지만 편집기에서 코드를 만드는 데 어려움이 있습니다. –

+0

-1이 문제의 정규식을 사용할 이유가 없습니다. 말할 것도없이, 당신의 솔루션은 매우 단단하고 모든 파일 이름이 완전한 숫자 일 것을 기대합니다. PHP는이 특정 유형의 문자열 분석을위한'pathinfo' 함수를 가지고 있습니다. 자세한 내용은 내 대답을 참조하십시오. –

+0

사진이 숫자가 아닌 경우 어떻게됩니까? 1.jpg 대신에 me.jpg와 같은 것이 있다면, 이것이 잘못되는 것입니까? –

2

foreach

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

변경 /[^.]+/에 정규식도 a.b.jpg을 포함합니다.

+2

'foo.bar '와 같은 파일 이름에 대해서는 실패합니다.jpg' –

+0

필자의 경우 두 배의 확장명을 가진 파일 이름에서 실제로 작동 할 필요가 있었기 때문에 이것이 유일한 해결책이었습니다. 감사. – Zuko

-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>"; 
+1

'my.new.picture.jpg'와 같은 파일 이름이 있으면 솔루션이 작동하지 않습니다. –

관련 문제