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

菅原浩紀 php-users@php.gr.jp
Fri, 02 Aug 2002 19:17:59 +0900


 菅原浩紀です。

小野さん

お返事ありがとうございます

//1件目のデータ
sample("a/b//a",1,$Dim);
sample("a/b//b",2,$Dim);
//2件目のデータ
sample("a/b//a",11,$Dim);
sample("a/b//b",12,$Dim);

このような感じで
実現できました

本当は下記のような(2次元)ものも検討していたのですが
どうやら企画倒れだったようです

sample("a/b//e//a",222,$Dim);
sample("a/b//e//b",333,$Dim);
sample("a/b//e//a",444,$Dim);
sample("a/b//e//b",555,$Dim);

これを実現できるようにちょっと
改造してみます(セコイ手で)


>菅原さん
>
>小野です。
>お求めの仕様がようやく理解できました。
>こんな感じでしょうか....
>#--------------------------------------------#
>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']という添え字を与えることになり、
>これはエラーになるでしょう。
>
>もちろん、回避は出来ますが、どのように回避するかは仕様次第ですね。
>
>
>_______________________________________________
>PHP-users mailing list
>PHP-users@php.gr.jp
>http://ns1.php.gr.jp/mailman/listinfo/php-users