这是我的困境,并提前感谢你!
我正在尝试为动态关联数组创建一个变量变量或类似的东西,并且有一段时间来弄清楚如何执行此操作。我正在创建一个文件浏览器,所以我使用这些目录作为数组中的键。
例:
我需要得到这个,所以我可以为它分配值
$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如何
答案 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
}
干杯。