is_array for MySQL使用PHP选择语句

时间:2011-08-23 13:50:50

标签: php mysql arrays

我有一个基本的PHP函数,我正在使用它。有时,它传递一个变量数组,有时它只传递一个变量。所以,目前,我有这样的事情:

 <?
 function do_this($user_id_array) {
   $user_ids = array();
   foreach ($user_id_array as $single_user_id) {
       $sql = 'SELECT username FROM users
               WHERE id = $single_unit';
               while($row = mysql_fetch_assoc($result)) {
                   array_push($user_ids, $row['id'];        
               }
   }
   return $user_ids;
 }
 ?>

我的问题是:如果我调用该函数并仅发送一个变量(而不是数组),它(显然)会给我以下错误:Invalid argument supplied for foreach()

我的问题是:如何以最少的代码以最有效的方式更改此功能?我是否必须使用if is_array()语句并创建2个SELECT语句,每种情况一个(数组和非数组)?

非常感谢!

5 个答案:

答案 0 :(得分:3)

我看到了几个选项:

  • 传递一个数组,即使它是一个元素长
  • 测试is_array()并采取相应行动
  • 添加另一个参数,说明是检查int还是数组。

我选择选项1或2,因为选项3容易出错。

此外,对于您的问题可能有更好的解决方案,您不应该为每个用户提供单个查询,而应该在MySQL中使用IN关键字,如下所示:

$users = (is_array($user_id_array)) ? implode(',',$user_id_array) : $user_id_array;
$query = "SELECT `username` FROM `users` WHERE `id` IN({$users})";

答案 1 :(得分:2)

哇。这是很多疑问。如何删除foreach并执行类似

的操作
if (is_array($user_id_array)){
    $sql = 'SELECT username,id FROM users
               WHERE id IN ('.implode(",", $user_id_array).')';
    $result = mysql_query($sql);

    while($row = mysql_fetch_assoc($result)){
        $users[$row['id']] = $row;
    }

}

答案 2 :(得分:1)

你可以写:

$user_id_array = (array)$user_id_array;

答案 3 :(得分:1)

if (!is_array($user_id_array))
    $user_id_array = array($user_id_array);

答案 4 :(得分:0)

function do_this($user_id_array) {
    $ids = array_map('intval', (array)$user_id_array);
    $sql = 'SELECT username FROM users
            WHERE id IN(' . implode(',', $ids) . ')';
    $result = mysql_query($sql);
    $usernames = array();
    while ($row = mysql_fetch_assoc($result)) {
       $usernames[] = row['id'];
    }
    return $usernames;
}

第一行确保您有一个数组((array)$user_id_array)并且所有值都是有效的整数。然后对所有用户ID执行单个SQL查询。