ホームページ > バックエンド開発 > PHPチュートリアル > バックスラッシュで区切られた文字列を連想配列に効率的に変換するにはどうすればよいですか?

バックスラッシュで区切られた文字列を連想配列に効率的に変換するにはどうすればよいですか?

Susan Sarandon
リリース: 2024-12-01 08:34:10
オリジナル
698 人が閲覧しました

How to Efficiently Convert a Backslash-Delimited String into an Associative Array?

バックスラッシュで区切られた文字列からの連想配列の生成

多くのシナリオでは、バックスラッシュで区切られたキーと値のペアを含む文字列を連想配列に変換する必要があります。この変換により、対応するキーを使用して個々の値に簡単にアクセスできるようになります。

カスタム正規表現の使用

効果的な方法の 1 つは、preg_match_all および array_combine:

preg_match_all("/([^\\]+)\\([^\\]+)/", $string, $p);
$array = array_combine($p[1], $p[2]);
ログイン後にコピー
この正規表現は文字列内のキーと値のペアに一致し、それらを 2 つの配列 ($p[1] と$p[2]) は、連想配列 $array に結合されます。

アプローチの一般化

このメソッドは、さまざまなキーと値の区切り文字とペアの区切り文字を処理するように適応できます。

# For key-value separation using ':' and pair separation using ','
preg_match_all("/([^:]+)\\([^\,]+)/", $string, $p);
$array = array_combine($p[1], $p[2]);
ログイン後にコピー
さまざまな区切り文字

さまざまな区切り文字に対応するために、正規表現は次のようになります。変更する必要があります:

# Allow different delimiters for keys, values, and pairs
preg_match_all("/([^:=]+)[ :=]+([^,+&]+)/", $string, $p);
ログイン後にコピー
英数字キーの制約

キーが英数字のみで構成されるようにするには:

# Allow only alphanumeric keys
preg_match_all("/(\w+)[ :=]+([^,+&]+)/", $string, $p);
ログイン後にコピー
追加の考慮事項

    先頭/末尾のスペースを削除します: preg_match_all("/s*([^=] )s*=s*([^,] )s*/", $string, $p);
  • オプションの引用符を削除します: preg_match_all("/s *([^=] )s*=s*'?([^,] )(?
代替手法

正規表現によるアプローチに加えて、次のような方法もあります。

parse_str(): 必須キーと値のペアがすでに区切られている前処理された文字列&.

explode() foreach: 展開されたキーと値のペアを手動で反復処理します。これにより、追加のオーバーヘッドが発生する可能性があります。

カスタム ループ:文字列を 1 文字ずつ解析します。explode() アプローチと似ていますが、処理速度が遅くなる可能性があります。

どのアプローチを選択するかは、アプリケーションの特定の要件とパフォーマンスに関する考慮事項によって異なります。

以上がバックスラッシュで区切られた文字列を連想配列に効率的に変換するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート