【问题标题】:Making username and userid into an array将用户名和用户标识放入数组
【发布时间】:2011-02-01 02:26:24
【问题描述】:

我想要我的数组,像这样:

array("userid"=>"username","1"=>"ganeshfriends","2"=>"tester")

mysql 查询如下:

$query = select username, userid from tbluser

$result = mysql_query($query);

while($row = mysql_fetch_array($result)){
    $items = array($row['userid']=>$row['username']);
}
print_r($items);

如何将 userid 设置为 key,将 username 设置为 val?

【问题讨论】:

  • 你能澄清一下你想要做什么,什么不起作用吗?据我所知,您已经有了解决方案。另外,第一个数组与其余数组有什么关系?另外,没有必要提出这个社区 Wiki 之类的问题。
  • 你有什么问题?您的代码看起来不错。此外,您的问题是一个普通问题,而不是社区 wiki。
  • 我认为问题在于,如果他按照现在设置的方式进行操作,如果有多行,他会在每次迭代中丢失前一个数组,因为它没有推送到数组。跨度>

标签: php arrays


【解决方案1】:

试试这个:

$query = "select username, userid from tbluser";

$result = mysql_query($query);
$items=array();
while($row = mysql_fetch_array($result)){
    $items[$row['userid']]=$row['username'];
}
print_r($items);

问题是您在 while 块的每个循环中删除并重新分配结果数组($items)

【讨论】:

  • 我不明白 OP 的问题 - $items[key] = value 与 $items = Array(key => value) 相同,只是前者将附加到 $items 如果它已经定义,而后者将使 @ 987654325@ 一个新数组。此外,您在该行之后还有一个杂散括号;-)
  • 不应该是$items[$row['userid']]=$row['username']);还是我不熟悉的符号样式?
  • 对不起,我忘了删除“)”
  • @Andy Shellam:使用 Array(key => value) 表单,您每次都重新分配 $item 变量,而使用 $items[key] = value 您在数组中创建一个新元素,因为键每次都不一样
  • @mck89 - 看看我漂亮的答案。
【解决方案2】:

既然每个人都在建议同样的事情,我想我也可以加入。

当我遇到来自 sql 值的键的情况时,我喜欢先将它们设置为变量,这样看起来会更好看:

$query = "select username, userid from tbluser";

$result = mysql_query($query);

while($row = mysql_fetch_array($result)){
    $userid = $row['userid'];
    $username = $row['username']
    $items[$userid] = $username;
}
print_r($items);

它可能会添加两行,但它肯定更容易眼睛并且避免括号中的括号。

【讨论】:

    【解决方案3】:

    你可以这样做:

    $arr = array('userid' => 'username');
    
    $result = mysql_query($query);
    if(!$result) die("Query failed");
    
    while($row = mysql_fetch_array($result)){
      $arr[$row['userid']] = $row['username'];
    }
    

    【讨论】:

      【解决方案4】:

      使用其他变量,比如 Anthony,我只想说,不要记得 stripslashes(我认为你在将它们写入数据库时​​已经完成了 mysql_real_escape_string())


      while($row = mysql_fetch_array($result)){
          $userid = $row['userid'];
          $username = stripslashes($row['username']);
          $items[$userid] = $username;
      }
      

      【讨论】:

      • mysql_real_escape_string() 在查询的上下文中转义值,它不会在数据库中留下斜杠。数据库值查询将返回值没有斜线。此时执行 stripslashes() 只会删除合法的斜杠。
      • 当他将“用户名”写入数据库时​​,(使用mysql_query("insert into ...")时),出于安全原因,他必须使用mysql_real_escape_string。进行安全查询。那么他必须使用stripslashes ...
      【解决方案5】:

      由于您只使用关联访问,我建议使用 mysql_fetch_assoc() 而不是 mysql_fetch_array()

      因为你不认为你想要一个由 mysql_fetch_array() 返回的关联数组,所以它创建了 2 个数组,一个带有 int-indexes,一个带有 string-indexes (assoc[iative]),即使这个简短的脚本没有'不使用太多内存并且可能有很高的速度,你应该永远记住performance。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-09-04
        • 2010-11-27
        • 1970-01-01
        • 2017-05-23
        • 2017-07-30
        • 2013-09-07
        • 2018-12-15
        相关资源
        最近更新 更多