【问题标题】:PHP removing value within forEach loop from mysqli_fetch_arrayPHP从mysqli_fetch_array中删除forEach循环中的值
【发布时间】:2016-06-07 19:37:43
【问题描述】:

我正在我的 SQL 数据库上运行以下查询。我接下来要做的是从$result_users 中删除所有用户,这些用户的user_ID 也是receiverID 数组中的receiverID。为此,我创建了以下代码,但是我不确定我的方法是否正确。我在网上找到应该做的是unset($array[$key]),但是我找到的所有例子都是普通数组,而不是从SQL数据库中获取的,因此我不知道这种情况下如何进行

 $retrieve_potential_matches_sender = mysqli_query($conn,"SELECT senderID, receiverID FROM match_instance WHERE senderID = '$sender'");
 $retrieve_all_users = mysqli_query($conn,"SELECT user_id, sex, latitude, longitude FROM users_with_fb");
 $result_sender = mysqli_fetch_array($retrieve_potential_matches_sender);
 $result_users = mysqli_fetch_array($retrieve_all_users);

 if count($result_sender) > 0 { 

 foreach ($result_sender as $sendingID) {

   foreach ($result_users as $userValue) { 

     if ($userValue["user_id"] == $sendingID["receiverID"] {

       unset($userValue);
    }
   }
 }

【问题讨论】:

  • 你为什么不直接在 sql 中加入呢?
  • rtfm:php.net/mysqli_fetch_array 该函数从查询返回单行结果,而不是所有结果。您不是在循环所有行,而是在循环单行的字段。你真的需要了解sql连接。像这样并行运行两个查询效率非常低(即使你做得正确)。
  • @Reto 会不会是 SELECT users_with_fb.user_id, users_with_fb.sex, users_with_fb.latitude, users_with_fb.longitude FROM users_with_fb INNER JOIN match_instance ON users_with_fb.user_id !=match_instance.receiverID; 之类的东西?
  • 是的,或者您可以使用这样的子查询:SELECT user_id, sex, latitude, longitude FROM users_with_fb WHERE user_id NOT IN (SELECT receiverID FROM match_instance);
  • 如果我希望它不等于接收者 ID 或发送者 ID,它会是:SELECT users_with_fb.user_id, users_with_fb.sex, users_with_fb.latitude, users_with_fb.longitude FROM users_with_fb WHERE user_id NOT IN (SELECT receiverID FROM match_instance) AND user_id NOT IN (SELECT senderID FROM match_instance); 吗?

标签: php arrays mysqli foreach


【解决方案1】:

你可以像这样做一个子查询:

SELECT user_id, sex, latitude, longitude FROM users_with_fb WHERE user_id NOT IN (SELECT receiverID FROM match_instance);

【讨论】:

    【解决方案2】:

    您正在取消设置循环使用的变量,而不是实际数组中的值。这应该是您正在寻找的:

    foreach ($result_sender as $sendingID) {
    
      foreach ($result_users as $key => $userValue) { 
    
         if ($userValue["user_id"] == $sendingID["receiverID"] {
    
           unset($result_users[$key]);
         }
      }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-01-06
      • 2017-04-01
      • 2018-08-20
      • 1970-01-01
      • 1970-01-01
      • 2015-09-21
      • 1970-01-01
      • 2018-02-14
      相关资源
      最近更新 更多