2010-11-29 13 views
1

タイトルはあまり説明的ではなく、私はお詫び申し上げますが、説明するためのより良い方法は考えられませんでした。私はデータベースにシリアル化された配列を最大10個持っています。私はそれらをプルダウンし、それらを新しい配列にシリアル化します。アレイの「自動ネーミング」問題

$specimen0 = unserialize($row['specimen0']); 
$specimen1 = unserialize($row['specimen1']); 

これは標本を示す順序付けられたリストにフォーマットされます。各標本について1トンのデータがあるので、それを何度も繰り返しコードしたくない。私のwhileループはそのように見えます:

while($i <= $num) { 

     if(isset($specimen{$i})) { 
     echo 'Yep'; 
     } 
     $i++ 
} 

これは一般化されたバージョンです。何らかの理由で、i変数が標本変数に追加されていないため、必要なすべての変数に適合する1つのサイズを作成できません。これはおそらく私が見過ごしているか、PHPが必要としている方法で処理しない単純なものです。どんな助けでも大歓迎です。

答えて

1

Fatherstormは非常によく、あなたのコードを修正する方法を説明しました。何私は思ってしまうことはこれです:

$specimen = array(); 
$specimen[0] = unserialize($row['specimen0']); 
$specimen[1] = unserialize($row['specimen1']); 


// maybe you could also use an foreach($specimen as $key=>$array) here, 
// don't know what you're trying to do... 
while($i <= $num) { 
    if(isset($specimen[$i])) { 
     echo 'Yep'; 
    } 
    $i++ 
} 

がそうでなければ、あなたが言及した他の人のようなvariable variablesを使用する必要があります - これは読めない(とunmaintainable)コードになってしまいます。なぜこのような配列を使用しないでください。配列のようなものを使いたいのであれば、その配列を配列にとります。

+0

私はこのプロジェクトを後半に引き継いで、すべてを書き直すことを避けようとしていました。もし私がそれを始めるなら、私はこのようにしたでしょう。 – RedElement

+0

私はこのコードをすべて書き直して使用しています。 – RedElement

3
while($i <= $num) { 
     $target='specimen'.$i; 
     if(isset($$target)) { 
     echo 'Yep'; 
     } 
     $i++ 
} 

variable variables

あなたがしようとしたものを
+0

これを忘れるために、私はゆっくりと老齢になるはずです。あなたはちょうど私に仕事の時間を節約しました。 – RedElement

0
while($i <= $num) { 
     $var='specimen'.$i; 
     if(isset(${$var})) { 
     echo 'Yep'; 
     } 
     $i++ 
} 

を見て:

$str='abcdef'; 
echo $str{4}; //echo e; 
$i=3; 
echo $str{$i};//echo d 
+0

あなたはisset()の二重$を忘れてしまったと思います – oezi