質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

2回答

1595閲覧

PHPの多次元配列のキー名を文字列で指定してunset()したい

nuages

総合スコア40

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2016/08/29 06:49

多次元配列を含む可能性のある配列変数からキー名を指定して unset() を行おうとしています。
['a'] という文字列を指定すると $params['a'] が削除され、
['c'][0] という文字列を指定した時、 $params['c'][0] が削除されるようになる
方法を探しています。

<?php $params = [ 'a' => 1, 'b' => 2, 'c' => [3, 4] ]; $key = "['a']"; print_r(unsetParam($key, $params)); function unsetParam($key, $params){ unset($params{$key}); return $params; }

eval() を使うなら

eval('unset($params' . $key . ');');

としてしまえば良いのですが安全のため最終手段にしたいと思っています。
なにか良い手段はないのでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kunai

2016/08/29 07:39

文字列で['a']と指定しないとダメなんでしょうか。 配列でarray('a', array('c' => 0))等として指定した方が色々楽そうですけど。
guest

回答2

0

ベストアンサー

こちらを参考にしました

php

1$params = [ 2 'a' => 1, 3 'b' => 2, 4 'c' => [3, 4], 5 'd' => ['e' => [5,6] ] 6]; 7$key = "['d']['e'][0]"; 8print_r(unsetParam($key, $params)); 9function unsetParam($key, &$params){ 10 $keys = preg_split( "/[\[\]'\"]+/",$key,null,PREG_SPLIT_NO_EMPTY); 11 $current = &$params; 12 foreach($keys as $k){ 13 if(!array_key_exists($k,$current)) return $params; 14 $parent =&$current; 15 $current = &$parent[$k]; 16 } 17 unset($parent[$k]); 18 return $params; 19}

投稿2016/08/29 07:37

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nuages

2016/08/29 09:54

教えていただいた方法で無事解決しました。ありがとうございます。
guest

0

正規表現を使うなどして、[ ]の中を取り出すのでしょうか。

投稿2016/08/29 07:00

otn

総合スコア84529

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問