php: Array keys case *insensitive* lookup?
2023-08-14 17:40:07
質問
$myArray = array ('SOmeKeyNAme' => 7);
私は
$myArray['somekeyname']
を返すように
7
.
配列を操作せずに、これを行う方法はありますか?
配列を作成しないので、キーを制御することができません。
どのように解決するのですか?
オプション 1 - 配列を作成する方法を変更する
線形探索を行うか、元の配列を変更することなく、これを行うことはできません。最も効率的な方法は strtolower を使うことです。
$myArray[strtolower('SOmeKeyNAme')]=7;
if (isset($myArray[strtolower('SomekeyName')]))
{
}
キーのオリジナルのケースを保持することが重要な場合、そのキーの追加値として保存することができます。例えば、以下のようになります。
$myArray[strtolower('SOmeKeyNAme')]=array('SOmeKeyNAme', 7);
オプション 2 - セカンダリーマッピングを作成する
質問を更新して、これがあなたにとって不可能であることを示唆したので、小文字と大文字を区別するバージョン間のマッピングを提供する配列を作成するのはどうでしょうか?
$keys=array_keys($myArray);
$map=array();
foreach($keys as $key)
{
$map[strtolower($key)]=$key;
}
これで小文字のキーから大文字小文字を区別するキーを取得することができます
$test='somekeyname';
if (isset($map[$test]))
{
$value=$myArray[$map[$test]];
}
これにより、小文字のキーを持つ配列の完全なコピーを作成する必要性を回避できます。
オプション 3 - 配列のコピーを作成する
配列の完全なコピーを作ることが気にならないのであれば array_change_key_case を使用して、小文字のキーを持つコピーを作成することができます。
$myCopy=array_change_key_case($myArray, CASE_LOWER);
関連
-
[解決済み] SQLSTATE[HY093]: 無効なパラメータ番号: パラメータが定義されていません
-
[解決済み】chromeの「net : Failed to load resource: net::ERR_SPDY_PROTOCOL_ERROR" は何がおかしいのか?
-
[解決済み] 配列から特定の項目を削除するにはどうすればよいですか?
-
[解決済み] JavaScript で配列に値が含まれているかどうかを確認するにはどうすればよいですか?
-
[解決済み] PHPで配列から要素を削除する
-
[解決済み] Java の配列を表示する最も簡単な方法は何ですか?
-
[解決済み] JavaScriptで配列の先頭に新しい配列要素を追加するにはどうすればよいですか?
-
[解決済み] 1...N を含む配列の作成方法
-
[解決済み】PHPの'foreach'は実際どのように動作するのですか?
-
[解決済み] リファレンス - このシンボルはPHPで何を意味するのですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Fatal error: 未定義の関数 sqlsrv_connect() を呼び出した。
-
[解決済み】PHP定数「PHP_EOL」はいつ使うの?
-
[解決済み】不明なMySQLサーバーのホスト
-
[解決済み】「初期通信パケットの読み込み」でMySQLサーバーに接続できなくなり、システムエラーになる。0
-
[解決済み] SQLSTATE[HY093]: 無効なパラメータ番号: パラメータが定義されていません
-
[解決済み】子テーマのCSSが親テーマをオーバーライドしない
-
phpのAllowed memory size of 134217728 bytes枯渇問題の解決法
-
MacでPHPを実行した際に、メモリサイズが134217728バイトも消費される問題の解決方法について
-
[解決済み】MySQLのカラム数が1行目の値数と一致しない【非公開
-
[解決済み] PHP 未定義関数への呼び出し