将字符串数组转换为对象数组

时间:2015-04-28 13:55:46

标签: php arrays object

我有一个空数组和数据。使用函数我可以将数据放入我的数组中,这是函数:

foreach($values as $key => $value){
  $name = $slugify->slugify($value->getColonne()->getName());

  if(!isset($array[$value->getPosition()])){
       $array[$value->getPosition()] = array();
  }

  array_push($array[$value->getPosition()],  $name . ":" . $value->getValue());
}

有了这个,我最后:[["nom:andraud"], ["nom:andro", "prenom:clement"]]

但我希望有类似的内容:[{nom:"andraud"}, {nom:"andro", "prenom:clement"}]

我需要一个对象数组,而不是一个字符串数组。

2 个答案:

答案 0 :(得分:3)

您可以使用stdClass

通过类型转换

$object = (object)$array;

或者您可以在foreach

中创建对象
foreach($values as $key => $value){
    $name = $slugify->slugify($value->getColonne()->getName());

    if(!isset($array[$value->getPosition()])){
        $array[$value->getPosition()] = new stdClass();
    }

    $array[$value->getPosition()]->$name = $value->getValue();
}

答案 1 :(得分:0)

好的,所以不需要字符串数组,而是需要一个对象数组

在这种情况下,您需要执行以下操作:

foreach ($values as $key => $value) {
   $name = $slugify->slugify($value->getColonne()->getName());

   if (!isset($array[$value->getPosition()])) {
       $array[$value->getPosition()] = new stdClass();
   }
   $array[$value->getPosition()]->$name = $value->getValue();
}

注意

在PHP> = 5.3 严格模式中,如果您需要在对象内创建属性而不生成错误,而不是:

$foo = new StdClass();
$foo->bar = '1234';

您需要将属性创建为关联数组中的位置,然后将数组转换回对象。你可以这样做:

$foo = array('bar' => '1234');
$foo = (object)$foo;

因此,在这种情况下,您的代码需要像这样:

foreach ($values as $key => $value) {
   $name = $slugify->slugify($value->getColonne()->getName());

   // cast the object as an array to create the new property,
   // or create a new array if empty
   if (isset($array[$value->getPosition()])) {
       $array[$value->getPosition()] = (array)$array[$value->getPosition()];
   } else {
       $array[$value->getPosition()] = array();
   }
   // create the new position
   $array[$value->getPosition()][$name] = $value->getValue();

   // now simply cast the array back into an object :)
   $array[$value->getPosition()] = (object)$array[$value->getPosition()];
}