PHP - 递归数组到对象?

有没有办法在PHP中将多维转换为对象?arraystdClass

强制转换为似乎不递归工作。 产生我正在寻找的结果,但必须有更好的方法......(object)json_decode(json_encode($array))


答案 1

据我所知,没有预构建的解决方案,因此您可以自行滚动:

function array_to_object($array) {
   $obj = new stdClass();

   foreach ($array as $k => $v) {
      if (strlen($k)) {
         if (is_array($v)) {
            $obj->{$k} = array_to_object($v); //RECURSION
         } else {
            $obj->{$k} = $v;
         }
      }
   }
   
   return $obj;
}

答案 2

我知道这个答案来得很晚,但我会为任何正在寻找解决方案的人发布它。

而不是所有这些循环等,你可以使用PHP的原生json_*函数。我有几个方便的函数,我经常使用

/**
 * Convert an array into a stdClass()
 * 
 * @param   array   $array  The array we want to convert
 * 
 * @return  object
 */
function arrayToObject($array)
{
    // First we convert the array to a json string
    $json = json_encode($array);

    // The we convert the json string to a stdClass()
    $object = json_decode($json);

    return $object;
}


/**
 * Convert a object to an array
 * 
 * @param   object  $object The object we want to convert
 * 
 * @return  array
 */
function objectToArray($object)
{
    // First we convert the object into a json string
    $json = json_encode($object);

    // Then we convert the json string to an array
    $array = json_decode($json, true);

    return $array;
}

希望这有帮助


推荐