查看是否有东西在数组中或者在数组中创建一个新条目


Seeing if something is in an array or making a new entry in the array

我试图得到以下数组来检查,看看当前用户是否已经在用户列表中,或者如果我需要在数组中创建一个新条目,但我不确定如何动态地做到这一点。

这是我当前的代码。我有一个以上这是工作良好的查询。我把bind_result贴出来,这样你们就都能看到我分配的变量了。

我该怎么做?

$stmt->bind_result($ordering, $userid, $username, $playername);
$users = array();
while ($stmt->fetch()) {
    $users = array(
     $user = array('name' => $username, 'players' => array($playername))
     );
}
print_r($users);

你需要这样的东西吗?

$users = array();
$user[] = array('name' => "1", 'players' => "players");
$user[] = array('name' => "2", 'players' => "players");
$user[] = array('name' => "3", 'players' => "players");
$user[] = array('name' => "1", 'players' => "players"); // this won't be included
$user[] = array('name' => "4", 'players' => "players");
$user[] = array('name' => "5", 'players' => "players");
foreach ($user as $u) {
    if(!in_array($u, $users)) $users[] = $u;
}
print_r($users);

如果是,你只需要改变这些行

$users = array(
     $user = array('name' => $username, 'players' => array($playername))
);
这些

$user = array('name' => $username, 'players' => array($playername));
if(!in_array($user, $users)) $users[] = $user;

那么你的最终代码就是

$stmt->bind_result($ordering, $userid, $username, $playername);
$users = array();
while ($stmt->fetch()) {
    $user = array('name' => $username, 'players' => array($playername));
    if(!in_array($user, $users)) $users[] = $user;
}
print_r($users);
<标题>编辑

如果您只想检查name键,将while改为:

while ($stmt->fetch()) {
    $user = array('name' => $username, 'players' => array($playername));
    foreach ($users as $uname) if ($uname['name'] == $u['name']) continue 2;
    $users[] = $user;
}

就性能而言,这不是最好的方法。