[解決済み] 許容されるキーの配列を使って、そのキーで配列をフィルタリングする
2022-03-24 14:40:02
質問
のコールバック関数は
array_filter()
は配列の値のみを渡し、キーは渡しません。
持っていれば
$my_array = array("foo" => 1, "hello" => "world");
$allowed = array("foo", "bar");
のキーをすべて削除するには、どのような方法がありますか?
$my_array
にないものは
$allowed
の配列は?
希望する出力
$my_array = array("foo" => 1);
解決方法は?
PHP 5.6では、3番目のパラメータとして
array_filter()
,
flag
に設定できること。
ARRAY_FILTER_USE_KEY
を使用すると、値ではなくキーでフィルタリングすることができます。
$my_array = ['foo' => 1, 'hello' => 'world'];
$allowed = ['foo', 'bar'];
$filtered = array_filter(
$my_array,
function ($key) use ($allowed) {
return in_array($key, $allowed);
},
ARRAY_FILTER_USE_KEY
);
PHP 7.4 で矢印関数が導入されたので、これをもっと簡潔なものにすることができます。
$my_array = ['foo' => 1, 'hello' => 'world'];
$allowed = ['foo', 'bar'];
$filtered = array_filter(
$my_array,
fn ($key) => in_array($key, $allowed),
ARRAY_FILTER_USE_KEY
);
のようなエレガントなものではないことは明らかです。
array_intersect_key($my_array, array_flip($allowed))
しかし、これにはキーに対して任意のテストを行うという柔軟性があります。
$allowed
は、プレーンな文字列ではなく、正規表現パターンを含むことができます。
を使用することもできます。
ARRAY_FILTER_USE_BOTH
を使用すると、値とキーの両方がフィルタ関数に渡されます。最初の例をもとにした例を示しますが、フィルタリングルールのエンコードには
$allowed
このように
$my_array = ['foo' => 1, 'bar' => 'baz', 'hello' => 'wld'];
$allowed = ['foo' => true, 'bar' => true, 'hello' => 'world'];
$filtered = array_filter(
$my_array,
// N.b. it's ($val, $key) not ($key, $val):
fn ($val, $key) => isset($allowed[$key]) && (
$allowed[$key] === true || $allowed[$key] === $val
),
ARRAY_FILTER_USE_BOTH
); // ['foo' => 1, 'bar' => 'baz']
関連
-
[解決済み】SQLSTATE[42000]: 構文エラーまたはアクセス違反が発生しました。1064 SQL 構文にエラーがあります - PHP - PDO [重複]。
-
[解決済み】mysqli_result クラスのオブジェクトを文字列に変換できない
-
[解決済み】stdClassクラスのオブジェクトが文字列に変換されない。
-
[解決済み] 配列から特定の項目を削除するにはどうすればよいですか?
-
[解決済み] JavaScript で配列に値が含まれているかどうかを確認するにはどうすればよいですか?
-
[解決済み] 配列からArrayListを作成する
-
[解決済み] 配列に特定のインデックスで項目を挿入する方法 (JavaScript)
-
[解決済み] PHPで配列から要素を削除する
-
[解決済み】オブジェクトの配列を文字列のプロパティ値でソートする
-
[解決済み] リファレンス - このシンボルは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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】SQLSTATE[42000]: 構文エラーまたはアクセス違反が発生しました。1064 SQL 構文にエラーがあります - PHP - PDO [重複]。
-
[解決済み】新しいPHPMailerはPHPMailerAutoload.phpが必要?
-
[解決済み] SQLSTATE[HY093]: 無効なパラメータ番号: パラメータが定義されていません
-
[解決済み】既に開始されているPHPセッション【重複あり
-
[解決済み] 入力ファイルが指定されていない
-
[解決済み】/var/www/htmlとは何ですか?[クローズド]
-
[解決済み】In_arrayが動作しない。
-
[解決済み】MySQLのカラム数が1行目の値数と一致しない【非公開
-
[解決済み】phpのシンタックスエラー、予期しないT_IFエラーを修正する方法は?[クローズド]。
-
[解決済み] Forbidden :このサーバーの /phpmyadmin にアクセスする権限がありません。