[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 メーリングリストの案内