Перевести строку с точкой, разделенной на ключи массива - PullRequest
1 голос
/ 01 июня 2011

У меня есть строка (например, 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.';'));
?>

Ответы [ 3 ]

4 голосов
/ 01 июня 2011

Начните с разрыва:

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

Затем перепишите его как вложенный массив:

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

И, наконец, объедините:

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

Редактировать: если вы хотите прочитать массив вместо этого, то ответ Базмегакапы - это то, что вы ищете.

1 голос
/ 01 июня 2011

Я написал небольшую рекурсивную функцию, чтобы справиться с этим.Сначала вы взорвете строку и передадите массив ($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);
0 голосов
/ 01 июня 2011

Это пояснение для использования функции разнесения:

<?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.
)

не как массив [привет] [мир] [его] [а] .......

...