2017-04-24 15 views
1

文字列変数を使用して配列形式を持つオブジェクトプロパティにアクセスしようとしましたが、文字列にインデックス選択が含まれているとアクセスできませんでした。この例を見てみましょう..私が何をしトリングたもの上記のコードは文字列でオブジェクトの配列プロパティにアクセス

try access1: itemNormal 
try access2: item1 
--- ERROR MESSAGE -- 
try access3:  <-- does not contain anything because of error, my expectation is it will be "item1" 
try direct: item1 

これはPHPとは不可能であるが返される文字列

$dummy = new stdClass(); 
$dummy->testNormal = 'itemNormal'; 
$dummy->testArray = array('item1', 'item2'); 

$access1 = 'testNormal'; 
$access2 = 'testArray'; 
$access3 = 'testArray[0]'; 

echo 'try access1: ' . $dummy->{$access1} . '<br />'; 
echo 'try access2: ' . $dummy->{$access2}[0] . '<br />'; 
echo 'try access3: ' . $dummy->{$access3} . '<br />'; 
echo 'try direct: ' . $dummy->testArray[0] . '<br />'; 

のような$ access3を使用することですか?

+0

私は思うが、このアプローチについては忘れてはならない。私はかなりあなたが望むようなより良い解決策があると確信しています – Peter

+0

私はそれが1つの呼び出しで行うことはできません恐れています。 1つの解決策は、[$ dummy - > {<>} {<>} を呼び出す前に文字列を分割することができますが、testArray [0] [1] [2] ... [n]文字列を分割して必要なオブジェクト要素を返す関数を記述しない限り –

答えて

0
$access_handler = explode('[', $access3); 
// get array name 
$array_name = $access_handler[0]; 
// get array index 
$array_index = substr($access_handler[1], 0, -1); 
// call the property 
echo $dummy->$array_name[$array_index]; 

この機能を作成することがあります。それ以外の場合は、文字列を評価するためにevalを使用する必要がありますが、これはお勧めできません。また、配列名からインデックスを切り離して、この例のように実行する方法はたくさんあります。

関連する問題