通过方括号手动多重调光阵列键设置不能按预期工作

时间:2013-03-08 19:52:41

标签: arrays php

很抱歉,问题的标题不够准确。我最近把所有的生产资料都搬到了一个新的生产服务器上(它曾经只是一个本地主机交易)。

问题是我的阵列工作不再有效。

我曾经能够沿着这些方向做点什么:

$arrtest = array();
$arrtest[1]="a";
$arrtest[1][2]="b";
var_dump($arrtest);

输出

array(2) {
  [1]=>
  string(1) "a"
  [2]=>
  array(1) {
    [2]=>
    string(1) "b"
  }
}

与...相同:

$foo = array(1=>'a',array(2=>'b'));

但是,方括号不再“假设”一个数组。这是新的生产示例:

$arrtest = array();
$arrtest[1]="a";
$arrtest[1][2]="b";
var_dump($arrtest);

输出

array(1) {
  [1]=>
  string(3) "a b"
}

我认为我在php.ini中缺少一个愚蠢的设置?我无法找到我正在寻找的东西,因为我不确定如何说出这个问题。

修改 真实世界的例子,因为即使我的问题本身也令人困惑。

foreach($mans as $key2=>$val2){
$models = scandir($level1.'/'.$val2);
    foreach($models as $key3=>$val3){
        if(substr($val3,0,1)==='.'){
            unset($models[$key3]);
        }
            $mans[$key2][]=$models[$val3];
    }
}

在这一点上几乎要重写整个事情。

尝试扫描顶部的directoy并获取文件夹名称(以$ mans保存) 然后通过recursivly遍历$ mans的每个目录,并将$ mans [$ key]下的目录添加为第二级。

1 个答案:

答案 0 :(得分:1)

你有一些时髦的逻辑。你的第一个例子无法产生第一个输出。

您将$ arrtest [1]设置为字符串,但之后您尝试将其设置为数组。这是什么?

$arrtest = array();
// You need to initialize the array here
$arrtest[1]=array();
$arrtest[1][]="a";
$arrtest[1][2]="b";
var_dump($arrtest);

此示例与您的原始输出匹配:

$arrtest = array();
// You need to initialize the array here
$arrtest[1]="a";
$arrtest[][2]="b";
var_dump($arrtest);

同样如此:

$arrtest = array();
// You need to initialize the array here
$arrtest[1]="a";
$arrtest[2][2]="b";
var_dump($arrtest);

输出:

array(2) {
  [1]=>
  string(1) "a"
  [2]=>
  array(1) {
    [2]=>
    string(1) "b"
  }
}