3

タイトルが言うように、それは本当に興味がありません。私は次の形式のファイル名を持って1347020478_Workbook1 12.19.19.csvいますWorkbook1 12.19.19.csv

私は正常に動作する次のコードを持っています:

$original_filename = explode('_', $list->file);
$timestamp         = array_shift($original_filename);
$original_filename = implode('_', $original_filename);

私が言うように、上記のコードは機能しますが、もっと簡単な方法があるのでしょうか?

4

6 に答える 6

9

stristr()との組み合わせを使用して、ltrim()配列の生成を回避できます。

$original_filename = ltrim(stristr($list->file, '_'), '_');

マニュアルを参照してくださいstristr。最初に見つかった針から最後までの干し草の山をすべて返します。

于 2012-09-07T15:34:09.657 に答える
5

strpos()やなどの文字列関数を使用できますsubstr()

$original_filename = '1347020478_Workbook1 12.19.19.csv';
echo substr( $original_filename, strpos( $original_filename, '_') + 1);
于 2012-09-07T15:35:33.600 に答える
4

長さが固定されていることがわかっている場合は、substr を使用できます。そうでない場合は、最初に strpos を使用できます。以下では、固定長の「substr」メソッドで 1 ~ 2 ミリ秒、「shift-implode」メソッドで 4 ミリ秒、可変長の「substr」メソッドで 1 ~ 2 ミリ秒が得られます。(配列を大きくするとメモリ不足になりますが、おわかりでしょう。)

$loops=1000000;

$filename="1347020478_Workbook1 12.19.19.csv"; 
for ($i=0;$i<$loops;$i++){
    $fn[$i]=$filename;
}

$start1=time();
for ($i=0;$i<$loops;$i++){
    $newname=substr($fn[$i],11);    
}
$end1=time();
echo $newname." time=".($end1-$start1)."<br><br>";


$filename="1347020478_Workbook1 12.19.19.csv"; 
for ($i=0;$i<$loops;$i++){
    $fn[$i]=$filename;
}

$start1=time();
for ($i=0;$i<$loops;$i++){
    $original_filename  = explode('_', $fn[$i]);
    $timestamp          = array_shift($original_filename);
    $original_filename  = implode('_', $original_filename);    
}
$end1=time();
echo $original_filename." time=".($end1-$start1)."<br><br>";


$filename="1347020478_Workbook1 12.19.19.csv"; 
for ($i=0;$i<$loops;$i++){
    $fn[$i]=$filename;
}

$start1=time();
for ($i=0;$i<$loops;$i++){
    $st=strpos($fn[$i],"_");
    $newname=substr($fn[$i],$st+1);    
}
$end1=time();
echo $newname." time=".($end1-$start1);
于 2012-09-07T15:53:44.030 に答える
4

すべてのタイムスタンプが2001 年 9 月 9 日01:46:40 GMT と2286 年 11 月 20 日17:46:39 GMT の間にある限り、タイムスタンプが長い間固定長であるという事実を悪用すると、最も簡単な方法は次のとおりです。

$original_filename = substr($list->file, 11);
于 2012-09-07T15:56:29.273 に答える
1

試す:

preg_replace('/^[0-9]+_/', '', $filename);
于 2012-09-07T15:34:12.290 に答える
0

ファイル名のリストについては、foreachaa を実行してくださいpreg_replace。同じ結果で、手順が 2 つ少なくなります。

于 2012-09-07T15:33:57.110 に答える