You can use this to quickly find all the files (recursively) in a certain directory. This beats maintaining a stack yourself.
<?php
$directory = "/tmp/";
$fileSPLObjects = new RecursiveIteratorIterator(
new RecursiveDirectoryIterator($directory),
RecursiveIteratorIterator::CHILD_FIRST
);
try {
foreach( $fileSPLObjects as $fullFileName => $fileSPLObject ) {
print $fullFileName . " " . $fileSPLObject->getFilename() . "\n";
}
}
catch (UnexpectedValueException $e) {
printf("Directory [%s] contained a directory we can not recurse into", $directory);
}
?>
Note: if there is a directory contained within the directory you are searching in that you have no access to read an UnexpectedValueException will be thrown (leaving you with an empty list).
Note: objects returned are SPLFileObjects
RecursiveIteratorIterator クラス
導入
再帰的なイテレータの反復処理に使用します。
クラス概要
RecursiveIteratorIterator
/* メソッド */
/* 継承したメソッド */
}目次
- RecursiveIteratorIterator::beginChildren — Begin children
- RecursiveIteratorIterator::beginIteration — Begin Iteration
- RecursiveIteratorIterator::callGetChildren — Get children
- RecursiveIteratorIterator::callHasChildren — Has children
- RecursiveIteratorIterator::__construct — Construct a RecursiveIteratorIterator
- RecursiveIteratorIterator::current — 現在の要素の値にアクセスする
- RecursiveIteratorIterator::endChildren — End children
- RecursiveIteratorIterator::endIteration — End Iteration
- RecursiveIteratorIterator::getDepth — 再帰的なイテレーションにおける現在の深さを取得する
- RecursiveIteratorIterator::getInnerIterator — Get inner iterator
- RecursiveIteratorIterator::getMaxDepth — Get max depth
- RecursiveIteratorIterator::getSubIterator — 現在の有効なサブイテレータを取得する
- RecursiveIteratorIterator::key — 現在のキーにアクセスする
- RecursiveIteratorIterator::next — 次の要素に移動する
- RecursiveIteratorIterator::nextElement — Next element
- RecursiveIteratorIterator::rewind — トップレベルの内部イテレータの先頭要素にイテレータを巻き戻す
- RecursiveIteratorIterator::setMaxDepth — Set max depth
- RecursiveIteratorIterator::valid — 現在の位置が有効かどうかをチェックする
RecursiveIteratorIterator
Michiel Brandenburg
14-Jun-2009 11:40
14-Jun-2009 11:40
crashrox at gmail dot com
19-Dec-2008 05:51
19-Dec-2008 05:51
Recursive multidimensional array flatten using SPL
<?php
function array_flatten_recursive($array) {
if($array) {
$flat = array();
foreach(new RecursiveIteratorIterator(new RecursiveArrayIterator($array), RecursiveIteratorIterator::SELF_FIRST) as $key=>$value) {
if(!is_array($value)) {
$flat[] = $value;
}
}
return $flat;
} else {
return false;
}
}
$array = array(
'A' => array('B' => array( 1, 2, 3, 4, 5)),
'C' => array( 6,7,8,9)
);
print_r(array_flatten_recursive($array));
?>
-- Returns:
Array (
[0] => 1
[1] => 2
[2] => 3
[3] => 4
[4] => 5
[5] => 6
[6] => 7
[7] => 8
[8] => 9
)
