数组数组到对象数组php

Mat*_*kle 1 php arrays object

我试图将关联数组转换为对象数组.

$assoc = array (
array(
    'prop1'=>'val1',
    'prop2'=>'val2',
),

array(
    'prop1'=>'val1',
    'prop2'=>'val2',
),
)
Run Code Online (Sandbox Code Playgroud)

这是我到目前为止的代码:

class Assoc {
public function setObject($assoc) {
    $this->assoc[] = new Obj($assoc);
}
}
class Obj {
public function __construct($item) {
    foreach ( $item as $property=>$value ) {
        $this->{$property} = $value;
    }
}
}

$test = New Assoc();
$test->setObject($assoc);
Run Code Online (Sandbox Code Playgroud)

此代码适用于单个数组,但不适用于数组数组.如果你可以帮助我认为是setObject函数中的循环.

jmk*_*yes 6

将关联数组转换为对象数组:

$output = array_map(function($element) {
    return (object) $element;
}, $assoc);
Run Code Online (Sandbox Code Playgroud)

足够简单。

编辑:如果您需要制作特定类的对象:

$output = array_map(function($element) use ($classType) {
    return new $classType($element);
}, $assoc);
Run Code Online (Sandbox Code Playgroud)

你可以把它概括为任何东西,真的。


cod*_*ake 5

编辑特定对象:

要尽可能接近现有的样式,而不要弄乱array_map voodoo:

class Assoc {
  public function setObject($assoc) {
    foreach ($assoc as $arr) {
      $this->assoc[] = new Obj($arr);
    }   
  }
}
class Obj {
   public function __construct($item) {
     foreach ( $item as $property=>$value ) { 
       $this->{$property} = $value;
     }  
   }   
}

$test = New Assoc();
$test->setObject($assoc);
Run Code Online (Sandbox Code Playgroud)

原版的:

如果您只需要通用转换,而不是特定的自定义对象(在帖子中不完全清楚?),您可以尝试这样做:

$new_array = array();
foreach ($assoc as $to_obj)
{
  $new_array[] = (object)$to_obj;
}

// Print results
var_dump($new_array);
Run Code Online (Sandbox Code Playgroud)

输出:

array(2) {
  [0]=>
  object(stdClass)#1 (2) {
    ["prop1"]=>
    string(4) "val1"
    ["prop2"]=>
    string(4) "val2"
  }
  [1]=>
  object(stdClass)#2 (2) {
    ["prop1"]=>
    string(4) "val1"
    ["prop2"]=>
    string(4) "val2"
  }
}
Run Code Online (Sandbox Code Playgroud)