2013-02-26 56 views
0

我試圖找出一個簡單的方法來接受列表,這樣線和冒號分隔列表陣列PHP

foo: Alpha 
bar: Bravo 
fooBar: Charlie 

將它轉化爲一個關聯數組這使值將

$array['foo'] //would contain Alpha 
$array['bar'] //would contain Bravo 

什麼是最簡單的方法來實現這一點?

+2

[parse_ini_string(http://php.net/manual/en/function.parse-ini-string.php) – raina77ow 2013-02-26 10:22:40

+3

你有一個像'富的字符串:阿爾法\ nbar:Bravo \ nfooBar:Charlie或者像[[「foo:Alpha」,「bar:Bravo」]]這樣的數組,或者列表是一個DOM元素,比如table或者ul或者......? – Nenotlep 2013-02-26 10:22:48

回答

1

像這樣的事情?:

$string = "foo: Alpha 
bar: Bravo 
fooBar: Charlie"; 

$array = array(); 
$lines = explode("\n", $string); 

foreach ($lines as $line) { 
    list($key, $value) = explode(": ", $line); 
    $array[$key] = $value; 
} 

var_dump($array); 


結果:

array(3) { 
    ["foo"]=> 
    string(6) "Alpha 
" 
    ["bar"]=> 
    string(6) "Bravo 
" 
    ["fooBar"]=> 
    string(7) "Charlie" 
} 
+0

謝謝,這個伎倆,但必須先檢查值,所以我沒有得到一個數組返回作爲空白的最後一個值。 if(strpos($ line,':')!== false) – chip 2013-02-26 12:01:23

0

試試這個: $ array = array();

$str = 'foo: Alpha'; 
$res = explode(":",$str); 
$array[$res[0]] = $res[0]; 
2

你可以做手工,如果你的第一個列表已經處於一個數組:

$array = []; 
$list = ['foo: Alpha', 'bar: Bravo']; 

foreach ($list as $element) { 
    $parts = explode(': ', $element); 
    $array[$parts[0]] = $parts[1]; 
} 

否則,簡單地使用parse_ini_string解析包含您的數據到一個關聯數組的字符串(注意,這功能需要PHP 5.3或更高版本)。

如果你的數據是一個字符串,並且你沒有PHP 5.3,你可以在新行上拆分得到一個數組:$list = explode("\n", $string);

+0

for ???那會工作嗎? – 2013-02-26 10:24:10

+0

你是對的,這是一個錯字。最近在Python中編碼過多;)。 – Wookai 2013-02-26 10:25:35

+1

反正我從我+1:D – 2013-02-26 10:26:19

0

也許這是矯枉過正,但如果你的文件格式有可能擴大,這是值得研究的YAML,你的例子發生成爲有效的YAML標記。所以,你可以例如使用Symfony YAML component

use Symfony\Component\Yaml\Yaml; 
$array = Yaml::parse('/path/to/file.yml'); 

它與當前的格式,如果你決定增加嵌套數組或其他非平凡的數據,只需要使用YAML語法,這是相當直觀。下面將介紹的格式爲: http://symfony.com/doc/2.0/components/yaml/yaml_format.html