首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将字符串转换为数组

将字符串转换为数组
EN

Stack Overflow用户
提问于 2011-06-20 21:51:53
回答 5查看 318关注 0票数 1

我有这个字符串:test1__test2__test3__test4__test5__test6=value

可以有任意数量的测试密钥。

我想写一个可以把上面的字符串转换成数组的函数

代码语言:javascript
复制
$data[test1][test2][test3][test4][test5][test6] = "value";

这个是可能的吗?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-06-20 21:58:36

代码语言:javascript
复制
$data = array();

// Supposing you have multiple strings to analyse...
foreach ($strings as $string) {
    // Split at '=' to separate key and value parts.
    list($key, $value) = explode("=", $string);

    // Current storage destination is the root data array.
    $current =& $data;

    // Split by '__' and remove the last part
    $parts = explode("__", $key);
    $last_part = array_pop($parts);

    // Create nested arrays for each remaining part.
    foreach ($parts as $part)
    {
        if (!array_key_exists($part, $current) || !is_array($current[$part])) {
            $current[$part] = array();
        }
        $current =& $current[$part];
    }

    // $current is now the deepest array ($data['test1']['test2'][...]['test5']).
    // Assign the value to his array, using the last part ('test6') as key.
    $current[$last_part] = $value;
}
票数 2
EN

Stack Overflow用户

发布于 2011-06-20 21:58:35

是的,这是可能的:

代码语言:javascript
复制
list($keys, $value) = explode('=', $str);
$keys = explode('__', $keys);

$t = &$data;
$last = array_pop($keys);

foreach($keys as $key) {
    if(!isset($t[$key]) || !is_array($t[$key])) {
        // will override non array values if present
        $t[$key] = array();
    }
    $t = &$t[$key];
}

$t[$last] = $value;

参考listexplode=&is_arrayarray_pop

票数 3
EN

Stack Overflow用户

发布于 2011-06-20 21:59:26

代码语言:javascript
复制
function special_explode($string) {
  $keyval = explode('=', $string);
  $keys = explode('__', $keyval[0]);
  $result = array();

  //$last is a reference to the latest inserted element                         
  $last =& $result;
  foreach($keys as $k) {
    $last[$k] = array();
    //Move $last                                                                
    $last =& $last[$k];
  }

  //Set value                                                                   
  $last = $keyval[1];
  return $result;
}

//Test code:
$string = 'test1__test2__test3__test4__test5__test6=value';
print_r(special_explode($string));
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6412280

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档