-1
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...
}
4

3 回答 3

2

你这样做是错的!

这就是arrays 的用途:

$result = array();

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

从您的评论中:

但是我将如何检查一个位置是否已设置或返回为空?我基本上需要 if (isset(position_1)) {show 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;
}
于 2012-04-18T18:57:28.927 回答
1

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

应该更容易:)

于 2012-04-18T18:56:59.173 回答
1

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

$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 声明之后。

但是数组不是更好的解决方案吗?

于 2012-04-18T18:59:30.510 回答