パーマリンク | 2008年01月29日 03:37
ディレクトリ内のファイル取得をごにょごにょやってた時に知った再帰って考え方。
配列の処理なんかにも使えたり、色々と役立つ場面は多く感心させられます。
class ArrayConvert
{
var $array_flat = array();
var $array_replace = array();
function ArrayConvert($serch, $key, $array)
{
$this->array_flat = $this->arrayFlatten($array);
$this->array_replace = $this->arrayReplace($serch, $key, $array);
}
// 多次元配列を一次元配列に
function arrayFlatten($array)
{
foreach ($array as $values) {
if (is_array($values)) {
$this->arrayFlatten($values);
} else {
$this->a[] = $values;
}
}
return $this->a;
}
// 配列の構造を保ったまま値を処理
function arrayReplace($serch, $key, $array)
{
foreach ($array as $values) {
if (is_array($values)) {
$a = $this->arrayReplace($serch, $key, $values);
} else {
$a = str_replace($serch, $key, $values);
}
$b[] = $a;
}
return $b;
}
}
// TEST用配列
$array = array(
0,
1,
2,
array('zero', 'one', 'two', 'three', array(4, 5, 6)),
array('array' => '配列テスト'),
3,
4
);
$conv = new ArrayConvert(4, 'four', $array);
echo '<pre>';
var_dump($conv->array_flat);
var_dump($conv->array_replace);
echo '</pre>';
array(13) {
[0]=>
int(0)
[1]=>
int(1)
[2]=>
int(2)
[3]=>
string(4) "zero"
[4]=>
string(3) "one"
[5]=>
string(3) "two"
[6]=>
string(5) "three"
[7]=>
int(4)
[8]=>
int(5)
[9]=>
int(6)
[10]=>
string(15) "配列テスト"
[11]=>
int(3)
[12]=>
int(4)
}
array(7) {
[0]=>
string(1) "0"
[1]=>
string(1) "1"
[2]=>
string(1) "2"
[3]=>
array(5) {
[0]=>
string(4) "zero"
[1]=>
string(3) "one"
[2]=>
string(3) "two"
[3]=>
string(5) "three"
[4]=>
array(3) {
[0]=>
string(4) "four"
[1]=>
string(1) "5"
[2]=>
string(1) "6"
}
}
[4]=>
array(1) {
[0]=>
string(15) "配列テスト"
}
[5]=>
string(1) "3"
[6]=>
string(4) "four"
}
サニタイズなんかも再帰でらくらくできちゃいますね。
/ 金額 : ¥ 3,990