我有一个基本的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语句,每种情况一个(数组和非数组)?
非常感谢!
答案 0 :(得分:3)
我看到了几个选项:
is_array()
并采取相应行动我选择选项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查询。