
いつもお世話になります。
$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で質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
PHPにてクラスを配列にすること...
-
ネストが深い時のforeachはどう...
-
テキストファイルにてデータ管理
-
チェックボックス複数選択 mys...
-
SQL文の実行結果を変数で受けて...
-
String だと「 ByRef引数の型が...
-
emptyとcount
-
foreachの間にテーブルの<TR>を...
-
多次元配列をエンコードする関...
-
マッチング処理(1:N)
-
PHPは何故値渡しより参照渡しの...
-
バイナリファイルの内容を、そ...
-
配列をファイルに書き込む方法
-
PHPファイルでテキストファイル...
-
エラーメッセージ(無効な間接...
-
phpでcsvファイルから二次元配...
-
配列を指定した順序でソート
-
preg_splitがうまくいかないの...
-
PHPとMySQLで100万件のデータを...
-
クロス集計で商品名かつサイズ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
String だと「 ByRef引数の型が...
-
$_SESSIONに二次元配列を使える...
-
配列をループでたくさん宣言し...
-
ネストが深い時のforeachはどう...
-
配列を回すとき、最後の要素だ...
-
file_existsでファイル名の部分...
-
PHPにてクラスを配列にすること...
-
postgresql関数をつかったレコ...
-
foreachのなかで次のキーを参照...
-
【Smarty】foreach関数やsectio...
-
チェックボックス複数選択 mys...
-
漢字のソートについて
-
Smartyについて
-
PHP掲示板で新着順に表示させた...
-
PHP 多次元配列変数のデータ受...
-
チェックボックスが複数選択で...
-
sortableで並べ替えてDBに保...
-
PHPのカッコ[ ]の使い方について
-
Smartyのテンプレートからjavas...
-
プルダウンメニューでCSVデータ...
おすすめ情報