[PHP-users 15622]Re: unset()の挙動
Seiji Masugata
s.masugata @ digicom.dnp.co.jp
2003年 6月 2日 (月) 17:43:35 JST
こんにちわ、桝形です。
> PHPの配列はハッシュテーブルで、インデックスが連番とは限らない。
> つまり
> $stack[1]
> $stack[10]
> sizeof($stack) == 2
> です。
> この辺りは関係しないでしょうか。
>
> > unset( $stack[sizeof( $stack ) - 1] ); // 挙動不審
そんな感じがします。
ちょこっといじったプログラム( デバッグはさんだダケ ):
---------------------------------------------------------------------
<?
function PathComp2( $path )
{
$org = explode( '/', $path );
$stack = Array();
$size = sizeof( $org );
for( $i = 0; $i < $size; ++ $i )
{
switch( $org[$i] )
{
case '':
case '.':
break;
case '..':
print_r( $stack ); // ***
echo "[".( sizeof( $stack ) - 1 )."]"; // ***
unset( $stack[( sizeof( $stack ) - 1 )] ); // 挙動不審
echo "[".( sizeof( $stack ) - 1 )."]"; // ***
print_r( $stack ); // ***
//array_pop( $stack );
break;
default:
$stack[] = $org[$i];
//array_push( $stack, $org[$i] );
break;
}
echo( sizeof( $stack ).':'.$org[$i]."\t:".implode( '/', $stack )."\n" );
}
return implode( '/', $stack );
}
$str = "a/c/d/../../e/../f/g";
echo( PathComp2( $str )."\n" );
exit;
?>
---------------------------------------------------------------------
結果:
---------------------------------------------------------------------
1:a :a
2:c :a/c
3:d :a/c/d
Array
(
[0] => a
[1] => c
[2] => d
)
[2][1]Array
(
[0] => a
[1] => c
)
2:.. :a/c
Array
(
[0] => a
[1] => c
)
[1][0]Array
(
[0] => a
)
1:.. :a
2:e :a/e
Array
(
[0] => a
[3] => e
)
[1][1]Array
(
[0] => a
[3] => e
)
2:.. :a/e
3:f :a/e/f
4:g :a/e/f/g
a/e/f/g
---------------------------------------------------------------------
--
Seiji Masugata <s.masugata @ digicom.dnp.co.jp>
PHP-users メーリングリストの案内