我在尋找一種優雅的方法將$array
轉換爲$object
。將特定數組轉換爲對象
如果$array
包含Array ([0] => en=english [1] => fr=french)
產生的$object
應該包含stdClass Object ([en] => english [fr] => french)
最簡潔的方法是使用最少的變量名的人。
我在尋找一種優雅的方法將$array
轉換爲$object
。將特定數組轉換爲對象
如果$array
包含Array ([0] => en=english [1] => fr=french)
產生的$object
應該包含stdClass Object ([en] => english [fr] => french)
最簡潔的方法是使用最少的變量名的人。
你也可以使用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))
);
在這兩種情況下,輸出都是相同的。
應該這樣做:
<?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;
}
做到這一點的最佳方式
stdClass Object
(
[en] => english
[test] => blaat
[foo] => bar=test
)
你能做到這一點
foreach ($arr as $item)
{
$things=explode('=',$item);
$newArray[$things[0]]=$things[1];
}
$obj=(object) $newArray;
這不是他正在使用的數組... – 2011-01-20 12:20:06
如果您有元素「foo = bar = test」,將不起作用。雖然,問題中的例子沒有這種情況。 – 2011-01-20 12:24:45
這是我錯誤的複製示例!我糾正了這一點。 – 2011-01-20 12:27:38