代码之家  ›  专栏  ›  技术社区  ›  ReynierPM

如何线性化JSON并使其成为初始数组的一部分

  •  0
  • ReynierPM  · 技术社区  · 8 年前

    我有如下数组:

    array(
        'session_id'      => 'ea29e7ae5c976794896b4c256f455dd5',
        'user_identifier' => "{'user_id':87,'username':'some username','email':'someuseremail.com','first_name':'Some','last_name':'User','company':'Company'}",
        'request_uri'     => '/'
    );
    

    我想将其转换为以下内容:

    array(
        'session_id'  => 'ea29e7ae5c976794896b4c256f455dd5',
        'user_id'     => 87,
        'username'    => 'some username',
        'email'       => 'someuseremail.com',
        'first_name'  => 'Some',
        'last_name'   => 'User',
        'company'     => 'Company',
        'request_uri' => '/'
    );
    

    这意味着我正在解码JSON user_identifier key和我正在制作初始阵列的一部分 $original 然后我移除 user\u标识符 钥匙

    到目前为止,我所做的就是:

    foreach ($original as $key => $log) {
        $original[$key] = (array) $log;
    }
    
    foreach ($original as $key => $log) {
        foreach($log as $k => $v) {
            if ($k === 'user_identifier') {
                $original['decoded'] = (array) json_decode($v);
            }
        }
    }
    

    这给了我一个这样的数组:

    array(
        'session_id'  => 'ea29e7ae5c976794896b4c256f455dd5',
        'request_uri' => '/',
        'user_identifier' => "{'user_id':87,'username':'some username','email':'someuseremail.com','first_name':'Some','last_name':'User','company':'Company'}",
        'decoded' => array(
            'user_id'     => 87,
            'username'    => 'some username',
            'email'       => 'someuseremail.com',
            'first_name'  => 'Some',
            'last_name'   => 'User',
            'company'     => 'Company'
        )
    );
    

    您可能会注意到,这甚至不是我正在寻找的阵列,我已经有了一个 foreach 循环以将初始结果转换为数组-它以和的形式出现 stdClass 对象-然后是嵌套 foreach公司 循环解码JSON并尝试使其成为初始数组的一部分。

    在这种情况下,我需要添加另一个循环来线性化阵列。我关心的是这个数组只是一个示例,但我需要转换的数组是一个很大的数组。

    有没有更好的方法来实现这一点?

    我正在使用PHP 5.3.3

    1 回复  |  直到 8 年前
        1
  •  1
  •   Don't Panic    8 年前

    我会这样做:

    1. 将JSON从原始文件提取到数组中。(请确保设置的第二个参数 json_decode 因此,最终得到的是一个数组,而不是一个对象。)

      $identifier = json_decode($your_array['user_identifier'], true);
      
    2. 将提取的数组与原始数组合并。

      $your_array = array_merge($your_array, $identifier);
      
    3. 取消设置现在冗余的JSON

      unset($your_array['user_identifier']);