使用分隔为数组键的点转换字符串

时间:2011-06-01 11:06:29

标签: php arrays explode

我有一个字符串(如one.two.threemonth.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.';'));
?>

3 个答案:

答案 0 :(得分:4)

从爆炸开始:

$in = explode('.', $in);

然后将其重写为嵌套数组:

$arg = array();
foreach (array_reverse($in) as $key) {
   $arg = array($key => $arg);
}

最后合并:

$out = array_merge_recursive($arg, $out);

编辑:如果您正在寻找读取数组,那么bazmegakapa的答案正是您所寻找的。

答案 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] .......