PHP:split()が廃止になりました。代わりのものを。

こんにちは、さるまりんです。

今更なのですがPHP7で関数split()が廃止されました。古いプログラムが残っていてたまたま動作させた時に気づいて「ん?」となりました。気づくの遅いですね〜。

上のリンク先に書いてある通り、5.3.0で非推奨、7.0.0で削除されているんですね。split()自体をあまり使うことがなかったので気づかなかったです。

なくなったのだからプログラムを動作させるためにはその部分を書き換える必要があります。

上のリンク先には代わりに使える関数として

が記載されています。

今回僕がぶつかったのはこんなコード。

$count = split("<>", $line);

$lineには4<>5<>3<>1のような数字を<>で区切った文字列が入っており、それを4、5、3、1を含む配列にするという部分でした。

上の一つ目のpreg_split()は正規表現で区切りを指定して文字列を分割してくれます。今回の区切り文字は<>で正規表現は必要ないので、二つ目のexplode()を使いました。

$count = explode("<>", $line);

単純な置き換えですみました〜。

実行例です。

$line = "4<>5<>3<>1";
$count = explode("<>", $line);
print_r($count);

このコードの出力はこうなります。

Array
(
    [0] => 4
    [1] => 5
    [2] => 3
    [3] => 1
)

成功です。

ちなみに代わりに使える関数の一番下のstr_split()は文字列を長さを指定して分割する関数です。str_split("abcdef", 2)で文字列abcdefを2文字ずつ”ab”, “cd”, “ef”のようにしてくれます。

explode()の逆をやってくれる関数もあります。implode()です。この関数は配列の要素を区切り文字で繋いで文字列にしてくれます。上の例の$lineの区切り文字を<>から,に変更するにはこのようにします。

$line = "4<>5<>3<>1";
echo "before: $line\n"; // 変換前を表示
$count = explode("<>", $line);
$line = implode(",", $count);
echo "after: $line\n"; // 変換後を表示

実行時の出力はこうなります。

before: 4<>5<>3<>1
after: 4,5,3,1

<>,になっていますね。

それにしてもsplit()はかなり前から非推奨だったんですね。PHP 5.3.0なので2009年のようです。これを書いてるのが2019年、10年も前のことです。

「ん?動かない?」使っていないプログラムを見直すといろんな発見があるかもですね。

新しい情報にアップデートしていけるように頑張ります。

読んでくださってありがとうございます。

それではまた!