在php数组中添加MySQL结果具有重复值

时间:2017-04-23 08:03:26

标签: php mysql arrays pdo

解释情景:

我在MySQL DB中有这个表

+-------------------------------------------------------------------------+    
| message_id | client_id | admin_id | message | date_posted | read_status |
+-------------------------------------------------------------------------+

我正在选择所有消息并将它们分组到同一客户端的2D数组中,以便结果看起来像

 $messages = array( 
             "4" => array ("338", "4", "1", "message1", "20170904 120803", "0"),
             "5" => array ("339", "5", "1", "message2", "20170904 120807","0")
             ); 

我得到的结果是相似的,但数组中的每个值都是重复的

array (size=12)
  'message_id' => string '22' (length=2)
  0 => string '22' (length=2)
  'client_id' => string '14' (length=2)
  1 => string '14' (length=2)
  'admin_id' => string '1' (length=1)
  2 => string '1' (length=1)
  'message' => string 'hii I'm new to this' (length=19)
  3 => string 'hii I'm new to this' (length=19)
  'date_posted' => string '2017-04-22 17:17:13' (length=19)
  4 => string '2017-04-22 17:17:13' (length=19)
  'read_status' => string '0' (length=1)
  5 => string '0' (length=1)

这是我的查询

$grouped_messages = array();

foreach ($connect->query("SELECT DISTINCT * FROM request ORDER BY client_id") as $row) {
  var_dump($row);
    $client_id = $row['client_id'];

    if (!isset($grouped_messages[$client_id])) {
        $grouped_messages[$client_id] = array();
    }

    $grouped_messages[$client_id][] = $row;

}


 foreach ($grouped_messages as $client_id => $client_messages) {
    echo '<div>';
    echo '<p>Messages for client #' . $client_id . '</p>';

    foreach ($client_messages as $message) {
      foreach($message as $column) {
        echo $column;
      }
    }

    echo '</div>';
} 

关于为什么会发生这种情况的任何想法?

PS 同一个客户端可以有多个消息,这意味着该表中的多行代码将来自同一客户端的所有消息放入关联数组中的代码!

1 个答案:

答案 0 :(得分:1)

获取数字和文本键是PDO fetch的默认行为。

您可以更改它,在您的情况下,应该通过将属性PDO::ATTR_DEFAULT_FETCH_MODE设置为PDO::FETCH_ASSOC来完成:

$connect->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);

或者,您可以在实例化新的PDO对象时执行此操作。

更多模式here