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

发布于 2024-09-16 05:52:32 字数 574 浏览 8 评论 0原文

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

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

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

$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 循环的每次迭代期间动态地向数组附加一个新的维度。 ..但我不知道如何

Here is my dilemma and thank you in advance!

I am trying to create a variable variable or something of the sort for a dynamic associative array and having a hell of a time figuring out how to do this. I am creating a file explorer so I am using the directories as the keys in the array.

Example:
I need to get this so I can assign it values

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

so I was thinking of doing something along these lines...

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]]
    }

this is where I get stuck, I need to dynamically append a new dimension to the array durring each iteration through the for loop...but i have NO CLUE how

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

怀里藏娇 2024-09-23 05:52:32

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

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 来尝试。

干杯,
哈吉

I would use a recursive approach like this:

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;
    }
}

The code is untested as I have no PHP here to try it out.

Cheers,
haggi

旧街凉风 2024-09-23 05:52:32

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

IE

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

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

You can freely put an array into array cell, effectively adding 1 dimension for necessary directories only.

I.e.

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

print($a['x']);
print($a['y']['q']);
漫雪独思 2024-09-23 05:52:32

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

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

$数组=数组();
print_r(array_concatenate($array, $keys));
函数 array_concatenate($array, $keys){
if(count($keys) === 0){
返回$数组;
}
$key = array_shift($keys);
$array[$key] = array();
$array[$key] = array_concatenate($array[$key], $keys);
返回$数组;
}
就我而言

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


if(isset($array[$key0]) && isset($array[$key0][$key1] && isset($array[$key0][$key1][$key2])){
// 这样做
}
干杯

How about this? This will stack array values into multiple dimensions.

$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;
}

In my case, I knew what i wanted $keys to contain. I used it to take the place of:


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

Cheers.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文