【问题标题】:PHP convert Multidimensional Array of directories into stringsPHP将多维目录数组转换为字符串
【发布时间】:2016-06-23 22:41:16
【问题描述】:

我被递归函数困住了,我找不到任何可以完全满足我需要的东西,所以我希望有人能帮我解决这个问题。 我有一个给定驱动器的多维目录数组,我需要将它们转换为每个最深子目录的完整路径字符串。这是数组:

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

提前谢谢你。

【问题讨论】:

  • 你为什么放一个'.'在前缀的时候发现值是数组?

标签: php arrays recursion multidimensional-array


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:
    <?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);
    
    ?>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-22
      • 2015-06-20
      • 1970-01-01
      • 2019-02-13
      • 2012-11-17
      相关资源
      最近更新 更多