[PHP-users 9045] Re: 文字列から配列データの格納について

K.Ono php-users@php.gr.jp
Thu, 01 Aug 2002 12:52:06 +0900


菅原さん

小野です。
お求めの仕様がようやく理解できました。
こんな感じでしょうか....
#--------------------------------------------#
function sample($a,$b,&$Dmy){
  $array=split('/',$a);
  $tmp=&$Dmy;
  $max=sizeof($array);
  for($i=0;$i<$max;$i++){
    $v=$array[$i];
    $n=($i<($max-1))?($array[$i+1]):(false);
    if($v==''){
      $v=0;
      while(isset($tmp[$v]))$v++;
      if($n!==false){
        $f=false;
        for($j=0;$j<$v;$j++){
          if(!isset($tmp[$j][$n])){
            $v=$j;
            break;
          }
        }
      }
    }
    $tmp=&$tmp[$v];
  }
  $tmp=$b;
}
#--------------------------------------------#
ただ、考えて見ると一つ問題がありそうですね。
例えば、

'a/b/c',1

のようなデータを与えた場合、次の代入が行われることになります。

$Dmy['a']['b']['c']=1;

つまり、$Dmyと$Dmy['a']と$Dmy['b']の3つまではは「配列」ですが、
$Dmy['a']['b']['c']は 1 という値を持つスカラー型になります。

そこに、

'a/b/c/d,2

のようなデータを与えると、配列ではないはずの、

$Dmy['a']['b']['c']に対して、['d']という添え字を与えることになり、
これはエラーになるでしょう。

もちろん、回避は出来ますが、どのように回避するかは仕様次第ですね。