这次内爆怎么了?

时间:2014-04-04 11:55:19

标签: php arrays implode

只是玩弄不同的功能,在我继续自学之前,尽可能多地学习它们。有人可以解释一下下面发生了什么吗? (请忽略该查询未准备好或完全安全)

  $query = "SELECT userid FROM users_groups_memberships WHERE groupid='".$GroupID."'";
  $result = $mysqli->query($relationshipQuery);

       while($row = $relationshipResult->fetch_row()) {
             $existingMembers[]=$row;
       }

  $memberString = implode(', ', $existingMembers);
  echo $memberString;

我期待逗号分隔的数字列表,例如1, 4, 6, 88, 100,但我实际上得到了Array, Array, Array, Array, Array

我知道这很简单,因为我之前已经有过array,我记得那是因为我做了一些事情,我只是不记得了!

我实际上正在尝试使用$existingMembers查看in_array中是否存在其他变量值,但我总是得到0,可能是因为值也是array

提前感谢任何支持:)

5 个答案:

答案 0 :(得分:2)

$row是查询返回的列数组。

print_r($row)会显示您的添加内容。

尝试:

while($row = $relationshipResult->fetch_row()) {
    $existingMembers[]=$row['userid'];//Or $row[0] depending on the format of $row
}

答案 1 :(得分:2)

每一行都是一个数组,而内爆不会以二维方式连接。

如果您希望这样做输出,建议您尝试将循环中的语句更改为:

$existingMembers[] = $row['userid'];

答案 2 :(得分:1)

我知道我稍晚发布这个答案,但是何时使用不同的fetch_*函数的用例似乎有点脱节和不清楚。我将根据您的示例代码段和一些可能的替代方案探索解决方案:

解决方案

while($row = $relationshipResult->fetch_row()) {
    $existingMembers[]=$row[0];
}

请查看fetch_row()的文档。 fetch_row()将结果行作为枚举数组(即$row[0]$row[1]等)返回。


替代解决方案

处理枚举数组可能会不时混淆。您可以使用几种替代方法来避免编号索引的混淆。

备选方案1:

while($row = $relationshipResult->fetch_assoc()) {
    $existingMembers[]=$row['userid'];
}

在此示例中,结果行作为关联数组返回。这使得编码更清晰,更易理解,因为它允许您使用请求的字段名称作为数组索引。在您的示例中,SQL查询中的字段名称userid成为关联数组中的键,可以使用上述表示法访问。

有关此替代方案的详细信息,请参阅fetch_assoc()

备选方案2:

while($row = $relationshipResult->object()) {
    $existingMembers[]=$row->userid;
}

在此示例中,结果行作为对象返回。同样,这使编码更清晰,更易理解,因为它允许您使用请求的字段名称作为对象属性。在您的示例中,SQL查询中的字段名称userid成为对象属性,可以使用上述表示法进行访问。

有关此替代方案的详细信息,请参阅fetch_object()


摘要

回顾一下,这些是与fetch_*相关联的mysqli_*函数的具体用例。什么时候使用特定功能的用例似乎有点不清楚。我希望这有助于明确这一点。

祝你好运,编码愉快! :)

答案 3 :(得分:0)

尝试fetch_field()而不是我认为它将返回字段的值。 我认为fetch_row正在为你提供数组(' userid' => 1)

答案 4 :(得分:-1)

变化

$existingMembers[]=$row;

$existingMembers[]=$row['userid];