Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在PHP中从字符串创建无限深多维数组_Php_Arrays - Fatal编程技术网

在PHP中从字符串创建无限深多维数组

在PHP中从字符串创建无限深多维数组,php,arrays,Php,Arrays,可能重复: 我有一个字符串“db/yum/user”,我正在尝试分解它,使/的每个元素都成为更深的维度 因此,创建数据变量的直接方法是 $config['db']['yum']['user'] = "val"; 我迄今为止的努力: $config = array(); function set_config($key,$value){ global $config; //Multi deminsional config $mu

可能重复:

我有一个字符串“db/yum/user”,我正在尝试分解它,使/的每个元素都成为更深的维度

因此,创建数据变量的直接方法是

$config['db']['yum']['user'] = "val";
我迄今为止的努力:

$config = array();              
  function set_config($key,$value){
global $config;

        //Multi deminsional config
        $multi_configs = explode('/',$key);
        if($multi_configs!==false){
            $build_up = array();
            $c =& $build_up;

            foreach($multi_configs as $multi_config){
                $c[$multi_config] = array();
                $c     =& $c[$multi_config];
            }
            //$c = $value;
            array_merge($config,$c);
            return;
        }


        $config[$key] = $value;
    }
               set_config('db/yum/user','val');
               set_config('db/yum/server','val2');
                //etc,etc,etc, this was modified to make more sense in this context.

这可能就是您正在寻找的:

#!/usr/bin/php
<?php

$config = array();

function set_config($key, $value) {
  global $config;

  if (FALSE=== ($levels=explode('/',$key)))
    return;

  $pointer = &$config;
  for ($i=0; $i<sizeof($levels); $i++) {
    if (!isset($pointer[$levels[$i]]))
      $pointer[$levels[$i]]=array();
    $pointer=&$pointer[$levels[$i]];
  } // for

  $pointer=$value;
} // set_config

set_config('db/yum/user','val');
set_config('db/yum/server','val2');

print_r($config);

?>

您还可以使用阵列中的树结构实现相同的解决方案。以下是构造数组的代码:

$arr = array (5,6);

$new_arr=array ();
$prev=0;

foreach ($arr as $val) {
    $new_arr[$prev] = $val;
    $prev=$val;
}

$new_arr[$prev]="value";
以下是检索该值的代码:

    function retrieve ($arr) {

    $prev=0;
    while (1) {
        if (! isset($arr[$prev] ) )
            break;
        else $prev = $arr[$prev];

    }       
    return $prev;       
}

无限?你有quantum服务器来处理这个问题吗?@Fabriício Matté诀窍是让脚本的执行速度随着索引的增长而变慢,这样你添加硬件的速度比脚本添加元素的速度更快:-)我有另一个答案,它应该完全回答在同一个“配置”中设置多个值的可重用函数的问题变量通过连续的函数调用。我的建议是使用一些递归。它应该能处理你所需要的一切,我希望它能有所帮助。您还可以使用foreach循环,这将使此代码位更干净:)我得到
无法在您有
$pointer=&$pointer[$levels[$I]]的行上创建对字符串偏移量或重载对象的引用
@JPMC刚刚再次检查,代码仍然像预期的那样适用于我。要么您有不同的环境(php版本等),要么您有不同的值。@arkascha我的php版本是5.4.19,您的呢?我非常喜欢这段代码。它也教会了我很多关于指针的知识。谢谢
    function retrieve ($arr) {

    $prev=0;
    while (1) {
        if (! isset($arr[$prev] ) )
            break;
        else $prev = $arr[$prev];

    }       
    return $prev;       
}