[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