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

4

我遇到了递归函数的问题,但是我没有找到符合我的需求的解决方案,因此希望有人能够帮助我。 我有一个多维数组,代表给定驱动器中的目录,并且我需要将每个最深层次的子目录转换为完整路径字符串。以下是该数组:

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

Thank you in advance.


当您发现值是数组时,为什么要在前缀中加入“.”? - Vasil Rashkov
2个回答

2

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

$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/
)

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

function arrayToString($array, $parentStr = '')
{
    foreach($array as $key => $token)
    {
        if($token && is_array($token))
        {
            arrayToString($token, $parentStr . '/' . $key);
        }
        else
        {
            echo $parentStr . '/' . $token . '<br>';
        }
    }
}

arrayToString($array);

?>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接