基于 sql 查询在 while 循环中动态创建变量


Dynamically create variables in while loop based on sql query

SELECT a.uid, a.name_f, a.name_l, b.position FROM users a, room_members b WHERE a.uid = b.userid AND b.room_id=$room_id

我有上面的查询,它根据room_id选择某个用户的名称、uid、个人资料图片和位置,我想返回一个 while 循环,将以下变量分配给我的查询中返回的任何位置,动态。

$position1_name_f
$position1_name_l
$position1_uid
$position1_pic
$position2_name_f
$position2_name_l
$position2_uid
$position2_pic

因此,例如,如果位置 4 和位置 8 是返回的数据中唯一的位置,它将返回以下变量,我将能够在脚本中自由使用这些变量。

$position4_name_f
$position4_name_l
$position4_uid
$position4_pic
$position8_name_f
$position8_name_l
$position8_uid
$position8_pic

最多有 10 个职位。我迫切需要这些变量,因为我在网站的布局中大量使用它们,而且我无法做一个简单的 while 循环回显;否则,一切都会容易得多。

我尝试使用变量变量,也尝试部署计数器,但两者都无法正常工作。

我开始了以下查询,非常感谢一些帮助。谢谢

$room_members=mysql_query("SELECT a.uid, a.name_f, a.name_l, b.position FROM users a, room_members b WHERE a.uid = b.userid AND b.room_id=$room_id");
while($members_sql=mysql_fetch_array($room_members))
{
//Need some dynamic variables here...
}

你做错了!

这就是array的用途:

$result = array();
$result[1] = array('name_f' => 'data',
                   'name_l' => 'data',
                   etc,
                   );

从您的评论中:

但是,我将如何检查仓位是否已设置或返回空仓?我基本上需要如果(isset(position_1)){显示position_1_name_f}

if (isset($result[1])) {
    echo $result[1]['name_f'];
}

因此,您可以执行以下操作:

$members = array();
$room_members = mysql_query("SELECT a.uid, a.name_f, a.name_l, b.position FROM users a, room_members b WHERE a.uid = b.userid AND b.room_id=$room_id");
while($members_sql=mysql_fetch_assoc($room_members)) {
    $members[] = $members_sql;
}

为什么不为此使用数组或带有已实现迭代器的对象呢?

应该更容易:)

您可以将变量名称构建为字符串,如下所示:

$i = 1;
while($members_sql=mysql_fetch_array($room_members))
{
  $variablebase = 'position'.$i++.'_';
  $variablename = $variablebase.'name_f';
  $$variablename = $members_sql['name_f'];
}

在此之后,声明 $positionX_name_f。

但是阵列不是更好的解决方案吗?