将特定数组转换为对象

时间:2011-01-20 12:14:24

标签: php

我正在寻找一种将$array转换为$object的优雅方法。

如果$array包含Array ( [0] => en=english [1] => fr=french ),则生成的$object应包含stdClass Object ( [en] => english [fr] => french )

最优雅的方法是使用变量名最少的方法。

4 个答案:

答案 0 :(得分:4)

应该这样做:

$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 :(得分:2)

最好的方法:

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

返回:

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

答案 2 :(得分: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的联接数组内容。这需要在php.ini中启用allow_url_include

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

在这两种情况下,输出都是相同的。

答案 3 :(得分:1)

你可以这样做

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