0

私はこのようなコードを持っています、それは設定を初期化します

    $this->config = array(
        'users' => array(
            array('name' => 'admin',
                  'password' => $password
            )
        ),
        'tokens' => array(),
        'sessions' => array(),
    );

を使用してファイルに保存しjson_encode($this->config)、後でそれを使用してロードします

json_decode(file_get_contents('file.json'));

ネストされたオブジェクトを作成します。初期化と構成時にこのネストされたオブジェクトが必要ですが、これ以外にこのネストされたオブジェクトを作成する方法はありますか?

$this->config = json_decode(json_encode($this->config));
4

2 に答える 2

1

代わりにこの機能を使用できます

<?php
function arrayToObject($array) {
    if(!is_array($array)) {
        return $array;
    }

    $object = new stdClass();
    if (is_array($array) && count($array) > 0) {
      foreach ($array as $name=>$value) {
         $name = strtolower(trim($name));
         if (!empty($name)) {
            $object->$name = arrayToObject($value);
         }
      }
      return $object;
    }
    else {
      return FALSE;
    }
}
?>
于 2012-08-25T17:58:22.817 に答える
0

代わりにこの機能を使用することにしました

function object($array) {
    $object = new stdClass();
    foreach ($array as $k => $v) {
        $object->$k = $v;
    }
    return $object;
}

連想配列に対して明示的に呼び出す

$this->config = object(array(
    'users' => array(
        object(array(
            'name' => 'admin',
            'password' => $password
        ))
    ),
    'tokens' => array(),
    'sessions' => array(),
));

再帰コードを編集

function is_assoc($array) {
    if (!is_array($array)) {
        return false;
    } else {
        $keys = array_keys($array);
        return !is_numeric($keys[0]);
    }
}

function object($array) {
    if (is_assoc($array)) {
        $object = new stdClass();
        foreach ($array as $k => $v) {
            $object->$k = object($v);
        }
        return $object;
    } else {
        return $array;
    }
}
于 2012-08-25T18:28:11.350 に答える