str_replace
パラメータを 1 つずつ分析してみましょう。
range('-',T)
このrange()
関数は、最初のパラメーターから 2 番目のパラメーターまでの要素を含む配列を返します。文字は ASCII 値で考慮されるため、結果は次のようになります。
Array
(
[0] => -
[1] => .
[2] => /
[3] => 0
[4] => 1
[5] => 2
[6] => 3
[7] => 4
[8] => 5
[9] => 6
[10] => 7
[11] => 8
[12] => 9
[13] => :
[14] => ;
[15] => <
[16] => =
[17] => >
[18] => ?
[19] => @
[20] => A
[21] => B
[22] => C
[23] => D
[24] => E
[25] => F
[26] => G
[27] => H
[28] => I
[29] => J
[30] => K
[31] => L
[32] => M
[33] => N
[34] => O
[35] => P
[36] => Q
[37] => R
[38] => S
[39] => T
)
なぜT
代わりに"T"
?PHP には、未定義の定数を、定数の名前と同じ内容の文字列として評価させる誤機能があります。定数は定義されていないため、コード ゴルフの目的で 2 文字を保存T
するのと同じです。"T"
後も同様q
です。サーバーでエラー報告がオンになっている場合、未定義の定数に関する警告が表示されます。
split(q,"I justCannaLE?2Gotta >u=Msta=.q...");
これにより、文字列が文字で配列に分割されますq
。繰り返しますが、これにより、配列リテラルを使用するよりもコードが短くなります。結果:
Array
(
[0] =>
I justCannaLE?2Gotta >u=Msta=.
[1] =>
Ng1Nlet? downNrun<rH=5desMt?N>cryNsayRoodbyeNtE< lie5hurt?
[2] =>
We'T3n each@Jor s8lSg6r hear9<ch: but6;Lo7hyL7BInsideCe both3Cha9Ro: S
We3KeRa45we;QplB
[3] => 1)O)NgiT, nPgiT
(G
[4] => iT? up
[5] => howFJeel:
[6] => know
[7] => me
[8] => <=
[9] =>
YH
[10] => 8s
[11] => o
[12] => t's been
[13] => ing
[14] => 're
[15] => a
[16] => nd
[17] => make?
[18] => yH
[19] => othM
[20] => A
[21] => ay it
[22] => w
[23] => D
[24] => ell
[25] => I'm
[26] => G
[27] => ou
[28] => I
[29] => f
[30] => Lh
[31] => t
[32] => er
[33] =>
NP
[34] =>
(Ooh
[35] => eTrQ
[36] => RSna
[37] => g
[38] => on
[39] => ve
)
最後のパラメーターはターゲット文字列です。
"We; n7trangMsL8loT63Ke rules5s8d8I
AJull commit4nt'sChatFKink: of6CHldn'tRetKisJrom<ny@Ruy-/A= if?<sk 42DS'tLE 4?;Lo8bli=L7ee..
O,R1)O,R001)/-.."
配列を needle および haystack として渡すstr_replace()
と、置換は一度に 1 つずつ行われます。簡単にするために"We; n7trangMs"
、ターゲット文字列と同じように取り替えてから始めましょう;
。(2番目の配列の対応する置換)で置き換え"7"
た後の最初のステップ:"8s"
"We; n8strangMs"
次に"8"
、"o "
"We; no strangMs"
";"
と"'re"
"We're no strangMs"
"M"
と"er"
"We're no strangers"
つまり、元のテキスト内で繰り返される文字シーケンスを見つけて、それらを単一の文字に置き換える基本的な圧縮アルゴリズムです。その文字を解凍すると、元のシーケンスに置き換えられます。進行状況を繰り返し実行することで、一度圧縮されたテキストを再度圧縮できます ( "o s"
=> "8s"
=> "7"
)。