2011-06-01 12 views
1

我有一個字符串(如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.';')); 
?> 
+0

請考慮回答自己的問題,而不是編輯問題的答案。你甚至可以接受它。 **注意**:我強烈建議不要使用這種「eval」解決方案。只有在沒有其他方式時才應該使用'eval'(幾乎從不)。 – kapa 2011-06-08 06:51:07

回答

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

+0

我猜這張海報可能已經更清晰了,但我認爲他們試圖傳達一個概念,而不是指定他們想要使用該解決方案的功能。顯然explode()在這裏不起作用。 – baraboom 2011-06-01 11:14:59

+0

我可以理解這個事實,但用戶必須指定他不知道爆炸,或者他沒有使用它。 – 2011-06-01 11:18:46

+0

<?php $ lang ['one'] ['two'] ['three'] ='幹得好'; $ str ='one.two.three'; $ list = explode('。',$ str); $ result ='$ lang'; foreach($ list as $ item) { $ result。='[''。$ item。'「]'; } var_dump(eval(「return」。$ result。';')); – llobu 2011-06-01 12:14:59

4

開始爆炸的方式是:

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

然後把它改寫爲嵌套數組:

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

最後合併:

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

編輯:萬一你'正在尋求閱讀而不是數組,然後bazmegakapa的答案是你在找什麼。

+0

這是一個整潔。我打算提出一些類似的建議,但沒有很好地闡述。但是,我建議使用'array_merge_recursive',以防萬一有更多的字符串需要解析,例如「one.two.three」,然後是「one.two」。五'' – mkilmanas 2011-06-01 11:18:32

+0

Upvote for clean clean code! – Flukey 2011-06-01 11:21:09

+0

我們其中一個人誤解了這個問題:)。 – kapa 2011-06-01 11:22:37

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);