将字符串转换为可变
我有一个多维关联数组,其中包括像将字符串转换为可变
$data["status"]
$data["response"]["url"]
$data["entry"]["0"]["text"]
的元素我有一个字符串,如:
$string = 'data["status"]';
$string = 'data["response"]["url"]';
$string = 'data["entry"]["0"]["text"]';
我怎么能转换成字符串一个变量来访问正确的数组元素?此方法需要在任何维度上的任何数组上工作。
快速和肮脏的:
echo eval('return $'. $string . ';');
当然,输入字符串将需要先消毒。
如果你不喜欢快速和肮脏......那么这也会工作,它并不需要eval这使我甚至畏缩。
它,然而,做出关于字符串格式的假设:
<?php
$data['response'] = array(
'url' => 'http://www.testing.com'
);
function extract_data($string) {
global $data;
$found_matches = preg_match_all('/\[\"([a-z]+)\"\]/', $string, $matches);
if (!$found_matches) {
return null;
}
$current_data = $data;
foreach ($matches[1] as $name) {
if (key_exists($name, $current_data)) {
$current_data = $current_data[$name];
} else {
return null;
}
}
return $current_data;
}
echo extract_data('data["response"]["url"]');
?>
你会访问他们喜欢的:
print $$string;
-1这是行不通的。 – Triptych 2009-01-11 17:57:37
你是对的,它不与数组。如果已经测试过 – MattBelanger 2009-01-11 17:58:34
PHP的variable variables将帮助你在这里。您可以通过与另一美元符号作为变量的前缀使用它们:
$foo = "Hello, world!";
$bar = "foo";
echo $$bar; // outputs "Hello, world!"
发现这个Variable variables页:
function VariableArray($data, $string) {
preg_match_all('/\[([^\]]*)\]/', $string, $arr_matches, PREG_PATTERN_ORDER);
$return = $arr;
foreach($arr_matches[1] as $dimension) { $return = $return[$dimension]; }
return $return;
}
我与挣扎,以及, 我有这样的:
$user = array('a'=>'alber', 'b'=>'brad'...);
$array_name = 'user';
我想知道如何进入albert。
起初我试过
$value_for_a = $$array_name['a']; // this dosen't work
然后
eval('return $'.$array_name['a'].';'); // this dosen't work, maybe the hoster block eval which is very common
然后最后我尝试了愚蠢的事情:
$array_temp=$$array_name;
$value_for_a = $array_temp['a'];
,这只是工作完美! 智慧,做到这一点简单做到愚蠢。
我希望这回答了你的问题
这可以通过更简单的方式来完成。你所要做的就是想想PHP提供的创建变量的函数。
$string = 'myvariable';
extract(array($string => $string));
echo $myvariable;
完成!
您可以通过运营商&
参考。所以,在你的榜样,你就会有这样的事情
$string = &$data["status"];
$string = &$data["response"]["url"];
$string = &$data["entry"]["0"]["text"];
否则,你需要做这样的事情:
$titular = array();
for ($r = 1; $r < $rooms + 1; $r ++)
{
$title = "titular_title_$r";
$firstName = "titular_firstName_$r";
$lastName = "titular_lastName_$r";
$phone = "titular_phone_$r";
$email = "titular_email_$r";
$bedType = "bedType_$r";
$smoker = "smoker_$r";
$titular[] = array(
"title" => $$title,
"first_name" => $$firstName,
"last_name" => $$lastName,
"phone" => $$phone,
"email" => $$email,
"bedType" => $$bedType,
"smoker" => $$smoker
);
}
什么是一个详细的备选方案?推荐一个更好的,更有用的字符串格式呢? – 2011-05-25 11:22:18
因为这不会回答这个问题 – 2011-06-01 00:39:20