我有一个字符串(如one.two.three
或month.2
),我需要将此字符串爆炸点字符转换为数组键。
所以我有month.2
我需要使用代码行将此字符串翻译为$lang['month'][2]
我一直在找那个解决方案,但是我无法找到它,我被封锁了。
我终于找到了这个:
<?php
$lang['one']['two']['three'] = 'well done';
$str = 'one.two.three';
$list = explode('.', $str);
$result = '$lang';
foreach ($list as $item)
{
$result .= '["'.$item.'"]';
}
var_dump(eval("return " . $result.';'));
?>
答案 0 :(得分:4)
从爆炸开始:
$in = explode('.', $in);
然后将其重写为嵌套数组:
$arg = array();
foreach (array_reverse($in) as $key) {
$arg = array($key => $arg);
}
最后合并:
$out = array_merge_recursive($arg, $out);
编辑:如果您正在寻找读取数组,那么bazmegakapa的答案正是您所寻找的。 p>
答案 1 :(得分:1)
我写了一个小的递归函数来处理这个问题。首先爆炸字符串,然后传递数组(示例中为$lang
,我的$a
),并将此爆炸数组传递给GetVal()
。它会尽力将所需的值返回到$x
。
$s="month.2";
$keys=explode('.', $s);
$a=array(
'month' => array('1' => 'fos', '2' => 'fos2'),
'retek' => 1
);
function GetVal($array, $keyarray) {
$key=array_shift($keyarray);
if (array_key_exists($key, $array)) {
if (count($keyarray)==0) {
return $array[$key];
} else {
return GetVal($array[$key], $keyarray);
}
} else {
return null;
}
}
$x=GetVal($a, $keys);
var_dump($x);
答案 2 :(得分:-1)
它澄清了爆炸功能的使用:
<?php
$str = "Hello world. It's a beautiful day.";
print_r (explode(" ",$str));
?>
此代码爆炸为:
Array
(
[0] => Hello
[1] => world.
[2] => It's
[3] => a
[4] => beautiful
[5] => day.
)
不是数组[你好] [世界] [它] [a] .......