Ben adında dosyalar var
1234_crob.jpg
1234.jpg
2323_örja.bmp
2323.bmp
etc.
Nasıl sadece mesela numara alabilirsiniz 1234 ve 2323?
Dosya isimlerinin hepsi normal ifadeler kullanmaya gerek yoktur numaraları ile başlarsanız, bunun yerine bu deneyin:
foreach (glob('/path/to/dir/{0,1,2,3,4,5,6,7,8,9}*', GLOB_BRACE) as $file)
{
echo $file . ' = ' . intval(basename($file)) . "<br />\n";
}
Bu updated glob pattern will only match filenames that start with a digit, istediğiniz gibi.
@ghostdog74: Haklısın.
foreach (glob('/path/to/dir/{0,1,2,3,4,5,6,7,8,9}*', GLOB_BRACE) as $file)
{
echo $file . ' = ' . filter_var(basename($file), FILTER_SANITIZE_NUMBER_INT) . "<br />\n";
}
İlk explode dönemi, ve sonra çizgi üzerine patlayabilir, ve sonra sayı döndürülen listedeki ilk unsurdur.
<?php
$str1 = "1234.jpg";
$str2 = "1234_crob.jpg";
$pieces = explode("_",current(explode(".",$str1)));
echo $pieces[0]; // prints 1234
$pieces = explode("_",current(explode(".",$str2)));
echo $pieces[0]; // prints 1234
?>
Evet, bu normal bir ifade değildir gerçekleştirmek, ancak bu normal ifadeler kullanmak için bir görev çok basit.
EDIT: Modified code to work for your newly edited formatting examples. EDIT: Modified to fit cleanly in one line of code.
Sadece dosya isimleri (ve filepaths) geçmek varsayarsak, aşağıdaki tüm ardışık sayılar 0-9 almak gerekir:
function getDigits($fn) {
$arr = array();
preg_match('/[0-9]+/', $fn, $arr);
return $arr;
}
EXAMPLE USAGE
var_dump(getDigits('hey_12345.gif'));
/*
output:
array(1) {
[0]=>
string(5) "12345"
}
*/
var_dump(getDigits('123487_dude.jpg'));
/*
output:
array(1) {
[0]=>
string(6) "123487"
}
*/