“自动命名”数组的问题

时间:2010-11-29 14:04:55

标签: php arrays

标题不是很具描述性,我道歉,但我想不出更好的解释方法。我在数据库中有多达10个序列化数组。我将它们拉下来并将它们反序列化为一个新的数组:

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

然后将其格式化为显示样本的有序列表。由于每个样本有大量数据,我不想一遍又一遍地编码10次。我的while循环看起来像这样:

while($i <= $num) {

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

这是通用版本。由于某种原因,i变量不会附加到样本变量,以创建一个适合我想要的变量。这可能是我看起来很简单的事情,或者php无法按我需要的方式处理它。任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:3)

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

查看variable variables

答案 1 :(得分: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 - 这将最终导致无法读取(且无法维护)的代码。如果你想使用像数组这样的东西,可以为这个工作拿一个数组。

答案 2 :(得分: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