我遇到了递归函数,我找不到任何可以完成我需要的东西,所以我希望有人可以帮我解决这个问题.
我有一个给定驱动器的多维目录数组,我需要将它们转换为EACH最深子目录的完整路径字符串.这是阵列:
我有一个给定驱动器的多维目录数组,我需要将它们转换为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/ )
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。