使用foreach函数格式化数组输出

时间:2010-12-13 20:17:52

标签: php sql

我有一个脚本,它应该从我的sql表中的字段“UserID”中收集数据,将所有数据提交到数组中,然后将变量与数组中的whats进行比较。如果变量的值已经在数组中,请告诉用户该值无效。

$sql = "SELECT *" //User info
    . " FROM Users" ;
$result = mysql_query($sql); 
//insert where line for assessorid


$users = array();

while(($user = mysql_fetch_assoc($result))) { 
$users[] = $user;
}

foreach($users as $user){ 
$user['UserID']; 
 }

我需要$ users的输出等同于array('user1','user2','user3'); 发生的事情是数据来自$ user_name的表单。我想在如下声明中使用它:

if(in_array($user_name,$users)){
  echo "username available"
}
else{
  echo "not available"}

我尝试使用提取功能,但这只会造成很大的混乱。 我不确定我正在做什么是不正确的,除非$ user作为数组的格式无法在in_array()函数中解析,因为它是当前格式化的。任何建议都非常感谢。谢谢!

6 个答案:

答案 0 :(得分:1)

$sql = "SELECT USERID FROM Users" ;

$result = mysql_query($sql); 

$users = array();

while(($user = mysql_fetch_assoc($result))) {
$users[] = $user['USERID'];
}

当你说

$users[] = $user;

您没有指定结果集中的哪一列要附加到数组中。

答案 1 :(得分:0)

也许我错过了什么......为什么不这样做:

SELECT UserID FROM Users WHERE Username = 'username'

然后只需使用mysql_num_rows()检查用户名是否已存在。这应该更快,更有效(内存方面)。

答案 2 :(得分:0)

在这种情况下,您从数据库中收集所有数据,并且还需要在PHP中进行一些低效的处理。最好查询该值以查看它是否在数据库中,因此:

$username = mysql_real_escape_string($username);
$query = "
  select
    count('x') as usercount
  from
    users u
  where
    u.username = '$username'";

如果'usercount'为0,则用户名不存在。如果> 0,用户名确实存在。这样,您就让数据库完成它的设计工作,而实际检索的唯一值就是单个数字。

答案 3 :(得分:0)

您是否尝试过修改查询?目前,您获得了每个用户的所有值,但您刚看到需要UserID。你可以这样做:

$sql = "SELECT UserID FROM Users";
$result = mysql_query($sql); 

$users = array();

while(($user = mysql_fetch_assoc($result)))
{ 
  $users[] = $user['UserID'];
}

// ...
if (in_array($user_name, $users))
{
  echo 'Username not available';
}
else
{
  echo 'Username available';
}

或者你可以在数据库中查找给定的用户名:

$sql = 'SELECT count(*) FROM Users WHERE UserID = '.mysql_escape_string($user_name);
$result = mysql_query($sql);

// and then just check if the resulting row is equal to 0

答案 4 :(得分:0)

您是否正在尝试编写一个脚本来检查是否使用了用户名?

如果是这样,为此目的构建实际查询可能更容易(也更有效),而不是依赖于程序化方法。

$sql = "SELECT COUNT(*) FROM Users WHERE Username = '$username'";

然后,您可以将此结果应用于计数,并允许用户注册或不注册是否返回大于零的值(用户已使用该名称)或不是(其免费)。

答案 5 :(得分:0)

正如已经提到的,这是检查现有用户名的一种相当低效的方法。修改查询的建议是很好的建议。

但是,要解决您提供的代码的问题:

in_array()不会检测多维数组中是否存在值。您的$users数组可能看起来像这样:

$users = array(
   array('userID', 'foo', 'bar'),
   array('userID', 'foo', 'bar'),
   array('userID', 'foo', 'bar')
)

in_array不会搜索第一组索引。如果这确实是您想要做的,请参阅此问题:in_array() and multidimensional array