1

这是我的困境,提前谢谢你!

我正在尝试为动态关联数组创建一个变量或类似的东西,并且花了很多时间弄清楚如何做到这一点。我正在创建一个文件资源管理器,所以我使用目录作为数组中的键。

示例:
我需要得到这个,所以我可以给它赋值

$dir_list['root']['folder1']['folder2'] = value;

所以我想按照这些思路做点什么……

if ( $handle2 = @opendir( $theDir.'/'.$file ))
{
    $tmp_dir_url = explode($theDir);
    for ( $k = 1; $k < sizeof ( $tmp_dir_url ); $k++ )
    {
        $dir_list [ $dir_array [ sizeof ( $dir_array ) - 1 ] ][$tmp_dir_url[$k]]
    }

这是我卡住的地方,我需要在每次迭代期间通过 for 循环向数组动态追加一个新维度......但我不知道如何

4

3 回答 3

2

我会使用这样的递归方法:

function read_dir_recursive( $dir ) {
    $results = array( 'subdirs' => array(), 'files' => array() );
    foreach( scandir( $dir ) as $item ) {
        // skip . & ..
        if ( preg_match( '/^\.\.?$/', $item ) )
            continue;
        $full = "$dir/$item";
        if ( is_dir( $full ) )
            $results['subdirs'][$item] = scan_dir_recursive( $full );
        else
            $results['files'][] = $item;
    }
}

该代码未经测试,因为我这里没有 PHP 可以试用。

干杯,
哈吉

于 2010-08-26T09:39:24.890 回答
0

您可以自由地将数组放入数组单元格中,有效地仅为必要的目录添加 1 维。

IE

$a['x'] = 'text';
$a['y'] = new array('q', 'w');

print($a['x']);
print($a['y']['q']);
于 2010-08-26T09:33:22.043 回答
0

这个怎么样?这会将数组值堆叠成多个维度。

$keys = array(
'year',
'make',
'model',
'submodel',
);

$array = array(); print_r(array_concatenate($array, $keys)); function array_concatenate($array, $keys){ if(count($keys) === 0){ return $array; } $key = array_shift($keys); $array[$key] = array(); $array[$key] = array_concatenate($array[$key], $keys); return $array; }

就我而言,我知道我想要 $keys 包含什么。我用它来代替:

if(isset($array[$key0]) && isset($array[$key0][$key1] && isset($array[$key0][$key1][$key2])){ // do this }

干杯。

于 2015-04-28T17:21:39.120 回答