2011-01-20 136 views
0

我在尋找一種優雅的方法將$array轉換爲$object將特定數組轉換爲對象

如果$array包含Array ([0] => en=english [1] => fr=french)產生的$object應該包含stdClass Object ([en] => english [fr] => french)

最簡潔的方法是使用最少的變量名的人。

回答

2

你也可以使用parse_ini_string

$object = (object) parse_ini_string(join(PHP_EOL, $array)); 

只要你所有的值都key=val這會工作。

爲INI文件的所有規則,這意味着它將窒息foo=bar=baz但不能在foo="bar=baz"因爲INI文件允許額外=時,它的投入引號。


如果你不是在PHP 5.3的是,你可以使用parse_ini_file接受來自data stream wrapper的加入數組內容。這需要allow_url_include在你的php.ini中啓用。

$object = (object) parse_ini_file(
    'data:text/plain,' . urlencode(join(PHP_EOL, $array)) 
); 

在這兩種情況下,輸出都是相同的。

4

應該這樣做:

<?php 
$arr = array('en=english','test=blaat','foo=bar=test'); 


foreach ($arr as $item) 
{ 
    $opts = explode('=',$item); 
    $name = array_shift($opts); 
    $obj->$name = implode('=',$opts); 
} 

print_r($obj); 

返回:

$object = new stdClass(); 

$array = array('en=english','fr=french', 'foo=bar=baz'); 
foreach($array as $item){ 
    list($name, $value) = explode('=', $item, 2); 
    $object->$name = $value; 
} 
+1

這不是他正在使用的數組... – 2011-01-20 12:20:06

+0

如果您有元素「foo = bar = test」,將不起作用。雖然,問題中的例子沒有這種情況。 – 2011-01-20 12:24:45

+1

這是我錯誤的複製示例!我糾正了這一點。 – 2011-01-20 12:27:38

2

做到這一點的最佳方式

stdClass Object 
( 
    [en] => english 
    [test] => blaat 
    [foo] => bar=test 
) 
1

你能做到這一點

foreach ($arr as $item) 
{ 
    $things=explode('=',$item); 
    $newArray[$things[0]]=$things[1]; 
} 
$obj=(object) $newArray;