加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

PHP将多维目录数组转换为字符串

发布时间:2020-12-13 16:59:51 所属栏目:PHP教程 来源:网络整理
导读:我遇到了递归函数,我找不到任何可以完成我需要的东西,所以我希望有人可以帮我解决这个问题. 我有一个给定驱动器的多维目录数组,我需要将它们转换为EACH最深子目录的完整路径字符串.这是阵列: ?php$array = array('CANON' = array( 'DCIM' = array( '100CANO
我遇到了递归函数,我找不到任何可以完成我需要的东西,所以我希望有人可以帮我解决这个问题.
我有一个给定驱动器的多维目录数组,我需要将它们转换为EACH最深子目录的完整路径字符串.这是阵列:

<?php
$array = array(
'CANON' => array(
    'DCIM' => array(
        '100CANON','101CANON','CANONMSC'
    ),'CANON_SC' => array(
        'IMAGE' => array(
            '0001'
        ),'DOCUMENT' => array(
            '0001'
        ),),'MISC'
));

这是所需的输出:

/CANON/DCIM/100CANON/
/CANON/DCIM/101CANON/
/CANON/DCIM/CANONMSC/
/CANON/CANON_SC/IMAGE/0001/
/CANON/CANON_SC/DOCUMENT/0001/
/CANON/MISC/

这是我到目前为止,但它只适用于第一个最深的目录,并忽略兄弟目录.

<?php
function flatten_directory($array,$prefix = '')
{
    $result = '';

    foreach($array as $key=>$value)
    {
        if(is_array($value))
        {
            $result .= $key .'/'. flatten_directory($value,$prefix . $key . '.');
        }
        else
        {
            $result .= $prefix . $key . $value;
        }
    }
    return $result;
}

先感谢您.

解决方法

前缀的想法很好,但这部分不起作用,因为你可能得到多个结果:

$result .= $key .'/'. flatten_directory($value,$prefix . $key . '.');

而不是返回单个字符串,返回一个字符串数组.你也在混淆何时使用$key和$value.

function flatten_directory($directory,$prefix = "") {
    $result = array();
    foreach ($directory as $key => $part) {
        if (is_array($part)) {
            $result = array_merge($result,flatten_directory($part,$prefix . "/" . $key));
        } else {
            $result[] = $prefix . "/" . $part . "/";
        }
    }
    return $result;
}

输出:

Array
(
    [0] => /CANON/DCIM/100CANON/
    [1] => /CANON/DCIM/101CANON/
    [2] => /CANON/DCIM/CANONMSC/
    [3] => /CANON/CANON_SC/IMAGE/0001/
    [4] => /CANON/CANON_SC/DOCUMENT/0001/
    [5] => /CANON/MISC/
)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读