PHP使用for循环动态地向数组添加维度

时间:2010-08-26 09:29:27

标签: php multidimensional-array associative-array dynamic-arrays

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

我正在尝试为动态关联数组创建一个变量变量或类似的东西,并且有一段时间来弄清楚如何执行此操作。我正在创建一个文件浏览器,所以我使用这些目录作为数组中的键。

例:
我需要得到这个,所以我可以为它分配值

$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循环动态地为数组添加一个新维...但我没有CLUE如何

3 个答案:

答案 0 :(得分: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来试用它。

干杯,
haggi

答案 1 :(得分:0)

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

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

print($a['x']);
print($a['y']['q']);

答案 2 :(得分: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; }

在我的情况下,我知道我想要$ key包含什么。我用它代替:

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

干杯。