【问题标题】:parsing a String in PHP在 PHP 中解析字符串
【发布时间】:2011-07-03 09:14:15
【问题描述】:

我得到了一个格式如下的字符串:

a:5:{s:21:"securimage_code_value";s:4:"4l7z";s:6:"userID";s:2:"25";s:8:"username";s:6:"lupoxy";s:10:"angemeldet";s:4:"true";s:9:"user_role";s:3:"111";}

我需要解析引号中的条目,并得到一个这样的数组:

$testarray[0]['key'] = "securimage_code_value";
$testarray[0]['value'] = "417z";

$testarray[1]['key'] = "userID";
$testarray[1]['value'] = "25";

等等……

不,我不是要破解任何会话;)我正在使用带有 Codeigniter 的 Uploadify,我需要根据用户的会话验证是否允许用户上传。我不能使用 Codeigniter 会话函数,因为 Uploadify 会为 Upload-PHP-Script 创建自己的会话。所以我把 session_id 作为 Uploadify scriptdata 传递,然后在 ci_sessions 表中查找 session_id,自己解析所需的 session 用户数据。

也许有人也知道更好的解决方案? ;)

【问题讨论】:

    标签: php string parsing codeigniter uploadify


    【解决方案1】:

    我相信你在找unserialize()

    http://php.net/manual/en/function.unserialize.php

    【讨论】:

      【解决方案2】:
      $params = unserialize($string);
      
      $testarray = array();
      foreach($params as $key => $value) {
         $testarray[]= compact('key', 'value');
      }
      

      请参阅unserialize 文档。


      更新。您还可以从 system/libraries/Session.php 继承/修补 sess_read() 以使其接受自定义会话 ID:

      之前:

      function sess_read() {
        ...
        // Unserialize the session array
        $session = $this->_unserialize($session);
        ...
      }
      

      之后:

      function sess_read($session_id = null) {
        ...
        // Unserialize the session array
        $session = $this->_unserialize($session);
        if ($session_id) $session['session_id'] = $session_id;
        ...
      }
      

      还要记得在会话配置文件中设置sess_match_useragent = false,否则Uploadify的请求会被拒绝,因为Flash的用户代理和浏览器的用户代理不同。

      现在您可以按 ID 加载任何会话:

      $this->session->sess_read($custom_session_id)
      

      比手动解析数据库中的数据要少得多。

      【讨论】:

      • 让它工作了...非常感谢!我在 PHP 方面还没有那么丰富的经验,而且我在做所有这些会议的东西时有点迷失了,你的帖子对我帮助很大!!!
      【解决方案3】:

      完整代码

      <?php
      
      $s = 'a:5:{s:21:"securimage_code_value";s:4:"4l7z";s:6:"userID";s:2:"25";s:8:"username";s:6:"lupoxy";s:10:"angemeldet";s:4:"true";s:9:"user_role";s:3:"111";}';
      
      $final = array();
      foreach (unserialize($s) as $k => $v) {
          $final[] = array('key' => $k, 'value' => $v);
      } 
      
      var_dump($final);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-01-24
        • 2017-01-27
        • 1970-01-01
        • 2011-04-05
        • 1970-01-01
        • 2019-02-07
        • 1970-01-01
        相关资源
        最近更新 更多