创建一个从字符串变量长度数组 [英] Create variable length array from string

查看:159
本文介绍了创建一个从字符串变量长度数组的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

字符串

$字符串='A.B.C.D';

应该创建像

阵列('A'=>阵列('B'=>阵列(....

我设法想出这样的:

function create_array(&$arr, $string, $data){


  $parts = explode('.', $string);
  $key = array_shift($parts); // first key

  $new_arr = array();
  $have_empty_slot = false;

  if(!isset($arr[$key])){
    $arr[$key] = array();
    $have_empty_slot = true;
  }

  $new_arr = &$arr[$key];

  foreach($parts as $part){
    if(!isset($new_arr[$part])){
      $new_arr[$part] = array();
      $have_empty_slot = true;
    }

    $new_arr = &$new_arr[$part];
  }

  // last one
  if($have_empty_slot)
    $new_arr = $data;

}    


$arr = array('a' => array('aa' => array('aaa' => 555)), 'b' => 55);

create_array($arr, 'c.cc.dd', 4545); // <-- works

create_array($arr, 'a.aa.aa2', 33); // <-- works

create_array($arr, 'a.aa.aaa.aaaaaaa', 4545); // <-- connection closed by remote server lol



print_r($arr);

所以,如果我尝试现有的一组元素的最后一个元素后添加一个新的元素,我得到了连接远程服务器错误关闭。这有什么错呢?

So if I try to add a new element after the last element of an existing set of elements I get that connection closed by remote server error. What's wrong with it?

推荐答案

这应该工作:

function create_array(&$arr,$string,$data){
    $a=explode('.',$string);
    $last=count($a)-1;
    $p=&$arr;

    foreach($a as $k=>$key){
        if ($k==$last) {
            $p[$key]=$data; 
        } else if (is_array($p)){
            $p[$key]=array();
        }
        $p=&$p[$key];
    }
}

这篇关于创建一个从字符串变量长度数组的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆