いつもお世話になります。
$key='aaa';
$Ary["$key"]='xxxx';
は、できます。
ここで、
$Ary[aaa][bbb][ccc]='zzzzz';
と、したくかつ、キーを変数で指定したいのです。
そこで、
$key='[aaa][bbb][ccc]';
$Ary"$key"='zzzz';
ダメです。
$key='aaa][bbb][ccc';
$Ary["$key"]='zzzz';
これもダメです。
ここの例ですと、3次元ですが、次元数も不確定です。
方法はないものでしょうか。
なんとかよろしくお願いいたします。
No.5ベストアンサー
- 回答日時:
> 最初の
> eval("$b=$str;");
> で、$bに$strの値が入らないことをいまいち理解できませんが
eval()関数は 変数の中身を 展開した状態で、PHPとして処理します。
なので、上記の場合だと、
$b の中身、 $Ary[aaa][bbb][ccc] に $str の中身、mogeeeeee を 代入している事になります。
PHPの内部では、
$Ary[aaa][bbb][ccc] = "mogeeeeee";
として、実行されてるって事です。
bm_hiroさん、ご丁寧にありがとうございます。
お陰で理解できました。
$key = "[aaa][bbb][ccc]";
$b = "\$Ary" . $key;
$str = "mogeeeeee";
eval("$b=$str;");
print '$b='.$b.'<br>';
--->$Ary[aaa][bbb][ccc]
$c=$Ary;
echo '$c='.$c.'<br>';
--->Array
期待通りです。
どうもありがとうございました。
No.3
- 回答日時:
<?
$key = "[aaa][bbb][ccc]";
$Ary[aaa][bbb][ccc] = "hogeeeee";
print $Ary[aaa][bbb][ccc] . "<hr>";
$b = "\$Ary" . $key;
$str = "mogeeeeee";
eval("$b = $str;");
print "$b<hr>";
print $Ary[aaa][bbb][ccc] . "<hr>";
exit;
?>
正直、自分でも こんな使い方が出来るとは思いもしませんでした。
試しにやってみたら、期待通りの結果が出ただけでした。
・参照 eval()関数
http://www.phppro.jp/phpmanual/php/function.eval …
bm_hiroさん、お早うございます。
レスありがとうございます。
$key = "[aaa][bbb][ccc]";
$b = "\$Ary" . $key;
$str = "mogeeeeee";
eval("$b=$str;");
print '$b='.$b.'<br>';
--->$b=$Ary[aaa][bbb][ccc]
$b="aaa";
echo '$b='.$b.'<br>';
--->aaa
ということで、$keyを変数とした多次元配列ができました。
ありがとうございました。
最初の
eval("$b=$str;");
で、$bに$strの値が入らないことをいまいち理解できませんが。
eval()が値を評価するだけで、その変数に値を入れるということはないということなのかと。
No.2
- 回答日時:
ちょうどついこの間自分のプロジェクトで必要で書いた関数が、目的に合いそうなので改造してみました。
私の場合は、検索が必要だったので、以下のような形。
//ツリー状の配列から、複数のキーで配列の値を検索する
function SeekArray($TargetArray,$keys){
//Keysには.で繋がれたキーが格納されている
return SeekArray_Recursive($TargetArray,explode('.',$keys));
}
//再帰呼び出しで複数のキーで配列の値を検索する
function SeekArray_Recursive($items, $keys, $index=0){
//検索対象が配列であることを確認
if (is_array($items)){
//キーが存在するか確認
if (array_key_exists($keys[$index],$items)){
//指定されたキーの一番最後を検索中
if ($index == count($keys)-1){
//キーが存在したため値を返す
return $items[$keys[$index]];
}elseif ($index < count($keys)){
//キーはまだ途中、さらに検索が必要
//再帰呼出
return SeekArray_Recursive($items[$keys[$index]],$keys,$index+1);
}
}
}
//見つからなかったためFALSEを返す
return false;
}
-----改造後
//ツリー状の配列から、複数のキーで配列の値を設定する
function SetSeekArray($TargetArray,$keys,$value){
//Keysには.で繋がれたキーが格納されている
return SetSeekArray_Recursive($TargetArray,explode('.',$keys),$value);
}
//再帰呼び出しで複数のキーで配列の値を設定する
function SetSeekArray_Recursive($items, $keys,$value, $index=0){
//検索対象が配列であることを確認
if (is_array($items)){
//キーが存在するか確認
if (array_key_exists($keys[$index],$items)){
//指定されたキーの一番最後を検索中
if ($index == count($keys)-1){
//キーが存在したため値を設定
$items[$keys[$index]]=$value;
return true;
}elseif ($index < count($keys)){
//キーはまだ途中、さらに検索が必要
//再帰呼出
return SetSeekArray_Recursive($items[$keys[$index]],$keys,$value,$index+1);
}
}
}
//見つからなかったためFALSEを返す
return false;
}
この回答への補足
BellBellさん、お早うございます。
その後教えていただいたスクリプトを何とか理解しようと努めまして、
ようやくできました。
bm_hiroさん、yambejpさん、i80286さん、どうもありがとうございました。
BellBellさん、レスありがとうございます。
>//ツリー状の配列から、複数のキーで配列の値を検索する
と、いうことで
私が行おうとしていることそのもののような気がしました。
未熟者故すぐに理解できないところがあります。
教えていただいた方法をゆっくり試してみます。
また、結果をご報告します。
ありがとうございました。
No.1
- 回答日時:
まず確認ですが、ご質問文にある
>>
$key='aaa';
$Ary["$key"]='xxxx';
<<
は間違いではありませんが、普通は
$key='aaa';
$Ary[$key]='xxxx';
と書きますよね。
そこで、
$Ary[$aaa][$bbb][$ccc]='zzzzz';
のように変数で添え字を指定するのではいけないのですか?
i80286さん、早速レスありがとうございます。
再帰呼び出しで、値をたどりたいため、
>$Ary[$aaa][$bbb][$ccc]='zzzzz';
の方法ではできなかったのですが。
どうも貴重なレスありがとうございます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) ¥マークを含むパスの処理について(マクロ、または関数) 2 2022/12/25 02:11
- Perl perl このテキストファイルを簡単に配列に入れるには? 2 2022/04/27 20:24
- SQL Server ACCESSで3ファイルを結合して、表を作成するやり方を教えて下さい。 17 2022/08/15 20:34
- SQL Server ACCESSで複数テーブルを結合して、リストを作る方法を教えてください。 2 2022/08/12 19:32
- Windows 10 バッチファイルの記述法とルールについてアドバイスをお願いいたします。 1 2022/04/13 10:50
- JavaScript JavaScript|特定URLだった時、特定の要素を変更するコードの書き方を教えてほしいです 2 2023/08/25 21:43
- その他(データベース) カラム上の重複を削除するクエリを教えてください 3 2022/04/12 14:11
- その他(Microsoft Office) パワークエリの複数ファイルのデータ統合について 3 2022/07/14 17:06
- MySQL エラー 1068 (42000): 複数の主キーが定義されていますエラー 2 2022/11/17 04:36
- JavaScript jsonテキストデータの並び替えができるサービスを教えてください 2 2022/08/05 20:16
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
配列をループでたくさん宣言し...
-
file_existsでファイル名の部分...
-
foreachのなかで次のキーを参照...
-
PHPで多次元配列を一度に処理す...
-
チェックボックス複数選択 mys...
-
mb_ereg_replaceについて
-
前のページで入力したものをあ...
-
プルダウンメニューでCSVデータ...
-
重複しないランダム関数を教え...
-
PHPで配列をPOSTデータで送った...
-
PHPのループ数限界値について
-
Smarty の演算方法
-
配列の書き方
-
PHPのカッコ[ ]の使い方について
-
プログラミングのPythonのnoteb...
-
スカラーのベクトル微分
-
PHPでこのコード自体に意味は無...
-
ヒアドキュメントの中のfor文
-
連想配列のキー値(連番)を基...
-
Excel VBAでフィルター後の対象...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
配列をループでたくさん宣言し...
-
file_existsでファイル名の部分...
-
$_SESSIONに二次元配列を使える...
-
foreachのなかで次のキーを参照...
-
String だと「 ByRef引数の型が...
-
配列を回すとき、最後の要素だ...
-
配列一致(要素順番は違うが内容...
-
PHPのカッコ[ ]の使い方について
-
ネストが深い時のforeachはどう...
-
チェックボックス複数選択 mys...
-
PHPで配列をPOSTデータで送った...
-
phpで、連想配列を普通の配列に...
-
PHP 多次元配列変数のデータ受...
-
postgresql関数をつかったレコ...
-
【PHP】配列内のある値以上をカ...
-
SQL文の実行結果を変数で受けて...
-
プルダウンメニューでCSVデータ...
-
Smartyのテンプレートからjavas...
-
PHPにてクラスを配列にすること...
-
CSVデータのn番目だけの値を取...
おすすめ情報