-1

この関数の意味

function entre2v2($text,$marqueurDebutLien,$marqueurFinLien)

{

$ar0=explode($marqueurDebutLien, $text);
$ar1=explode($marqueurFinLien, $ar0[1]);
$ar=trim($ar1[0]);
return $ar;
}

上記のコードでは、$ textはテキストファイルのコンテンツを指します。これは、フォームの投稿から次のコードによって取得されます。

$text=file_get_contents($_POST['file']);

誰かが言及されたphp関数について説明できますか?私はこれらの2つの変数が何を意味するのか理解していません

$marqueurFinLien
$marqueurDebutLien

最初の答えによると、私は試しましたが、エラーが表示されます。

Warning: Missing argument 3 for entre2v2(), called in C:\xampp\htdocs\php\test.php on line 5 and defined in C:\xampp\htdocs\php\test.php on line 13

Notice: Undefined variable: marqueurFinLien in C:\xampp\htdocs\php\test.php on line 18

Notice: Undefined offset: 1 in C:\xampp\htdocs\php\test.php on line 18

Warning: explode() [function.explode]: Empty delimiter in C:\xampp\htdocs\php\test.php on line 18

私が以下を使用したとき:

<?

$text=file_get_contents('http://localhost/php/w.txt');

$name=entre2v2($text,"DB_USER', ',');");


echo($name);
echo("<br>");



function entre2v2($text,$marqueurDebutLien,$marqueurFinLien)

{

$ar0=explode($marqueurDebutLien, $text);
$ar1=explode($marqueurFinLien, $ar0[1]);
$ar=trim($ar1[0]);
return $ar;
}

?>
4

2 に答える 2

3

要するに、それは文字列を解析する方法のように見えます-非常に非効率的で壊れやすいと私は言うかもしれません。

$ar0 = explode($marqueurDebutLien, $text);

$marqueurDebutLienこの行は、$ textに格納されている文字列を、文字列を区切り文字として使用して、サブ文字列の配列に分割(「分解」)します。次に、この配列の2番目$marqueurDebutLienの要素(つまり、次の要素)を取得し、もう一度分割します。

$ar1 = explode($marqueurFinLien, $ar0[1]);

...現在$marqueurFinLienセパレータとして使用しています。

この配列の最初の要素は、定義上、元の文字列($text$marqueurDebutLien$marqueurFinLien「マーカーサブ文字列」の間にある最初の文字列です。そのトリミングされたバージョンは、関数が返すものです。

なぜ非効率的ですか、あなたは尋ねるかもしれませんか?実際には、ここで非常に簡単に改善できるいくつかの小さなことがあります。sの制限explode。したがって、小さな部分のみが処理さtrimれ、変数に格納する代わりに、すぐに結果を返します。

しかし実際には、アプローチ全体に欠陥があります。これを見てください:

function notSoMysticEntre2v2($text, $openingDelimiter, $closingDelimiter) {
   $mark1 = strpos($text, $openingDelimiter);
   if ($mark1 === FALSE) { 
       return null; 
   }  
   $mark2 = strpos($text, $closingDelimiter, $mark1);
   if ($mark2 === FALSE) {
       return null;
   }
   $data  = substr($text, $mark1 + 1, $mark2 - $mark1 - 1);
   return trim($data);
}

nullこの関数は、最初の関数よりもはるかに確実であることに注意してください。開始区切り文字がない場合、または終了区切り文字が後にない場合、文字列の解析に正しく失敗します(エラーの兆候として返されます)。

于 2012-09-20T17:17:08.340 に答える
1

この関数は、入力から$marqueurDebutLienと文字列の間のテキストを返すように見えます。$marqueurFinLien$text

例えば

$text = "abcdefghijklmnop";
$result = entre2v2($text, 'd', 'lmn'); // will return 'efghijk'
于 2012-09-20T16:55:32.377 に答える