PHP分割代替?


92

PHPは分割が推奨されないことを教えてくれますが、私が使用すべき代替方法は何ですか?

回答:


131

explode代替です。ただし、正規表現で分割するつもりなら、代わりの方法ですpreg_split


15
同意しexplodeません- と同じ機能を実行しないため、代替手段ではありませんsplit。つまり、正規表現で文字列を分割することです。そのためには、を使用しますpreg_split
nickf

1
@nickf:それは間違いなく指摘されています。ありがとう
Sarfraz、

さまざまな言語で、splitメソッドは常に正規表現を受け入れるわけではありません。.NET、Pythonでは、String.Split()/ str.split()メソッドは固定されたリテラル文字列のみを針として受け入れます。したがって、explode正しいです。Java、JavaScript、Rubyを使用preg_splitしている場合は、解決策が見つかるかもしれません。
WiktorStribiżew2016年

Visual Basic .NETのString.Split()と互換性があります。ニース
Md Ashraful Islam

22

splitPOSIX正規表現を利用する関数ファミリーの一部であるため、非推奨です。そのファミリ全体がPCRE(preg_*)関数のために廃止されました。

正規表現機能が必要ない場合explodeは、非常に良い選択肢です(split非推奨でなくても推奨されます)。一方、正規表現を使用する必要がある場合、PCREの代替は単にpreg_splitです。


16
  • preg_split 正規表現で分割する必要がある場合。
  • str_split 文字で分割する必要がある場合。
  • explode 単純なもので分割する必要がある場合。

また、将来的には、何かが廃止された場合にPHPが何を使用することを望んでいるかを知りたい場合は、いつでもマニュアルで関数をチェックして、代替案を知ることができます。


7

ここからpreg_split();は離れていexplode();ますが、次のように使用できます。split();

以下はsplit();explode();使用法の比較です

split()の使用方法

<?php

$date = "04/30/1973";
list($month, $day, $year) = split('[/.-]', $date);
echo $month; // foo
echo $day; // *
echo $year;

?>

URL:http : //php.net/manual/en/function.split.php

explode()の使用方法

<?php

$data = "04/30/1973";
list($month, $day, $year) = explode("/", $data);
echo $month; // foo
echo $day; // *
echo $year;

?>

URL:http : //php.net/manual/en/function.explode.php

これを使用する方法は次のとおりです。


2

代わりに、より簡単な関数preg_matchを使用できます。これは、他のすべての関数よりも優れて高速です。

$var = "<tag>Get this var</tag>";
preg_match("/<tag>(.*)<\/tag>/", $var , $new_var);
echo $new_var['1']; 

出力: Get this var




0

同じ問題がありましたが、私のコードはPHP 5とPHP 7の両方で動作する必要があります。

これはこれを解決した私のコードです..区切り文字「/。-」の1つを使用してdmY形式で日付を入力します。

<?php
function DateToEN($date){
  if ($date!=""){
    list($d, $m, $y) = function_exists("split") ?  split("[/.-]", $date) : preg_split("/[\/\.\-]+/", $date);
    return $y."-".$m."-".$d;
  }else{
    return false;
  }
}
?>
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.