PHP使用键创建值数组

时间:2013-06-07 14:29:56

标签: php mysql

我想创建一个表来显示数据库中的数据列表。但是这些值不是存储在表中的行中,而是由具有自己列的每个值分隔。

所以我的样本数据

ID  Email           Value    
1   david@a.com     ABC    
1   david@a.com     DEF    
1   david@a.com     GHI    
2   jonathan@a.com  ABC    
2   jonathan@a.com  DEF    
2   jonathan@a.com  GHI

我想将其显示为:

ID  Email           Value1  Value2  Value3    
1   david@a.com     ABC     DEF     GHI    
2   jonathan@a.com  ABC     DEF     GHI

我的代码:

$query1 = "SELECT wp_users.ID, user_email, VALUE FROM wp_users LEFT JOIN wp_cimy_uef_data on wp_users.ID = wp_cimy_uef_data.USER_ID";
$listEmail = array();
$listValues = array();

// Start the Load
$statement = $db->query($query1);
if ( $statement->rowCount() == 0 )
{
    echo '<strong>List is Empty</strong>';
} else foreach($statement as $row):

    $ID = htmlspecialchars($row['ID']);
    $email = htmlspecialchars($row['user_email']);
    $value = htmlspecialchars($row['VALUE']);

    $listEmail = array_fill_keys($ID, $email);
    $listValues = array_fill_keys($ID, $value);

endforeach; 
mysqli_close($db);

print_r($listEmail);

2 个答案:

答案 0 :(得分:3)

SELECT wp_users.ID, wp_users.user_email, 
GROUP_CONCAT(wp_users.value) 
FROM wp_users LEFT JOIN wp_cimy_uef_data on wp_users.ID = wp_cimy_uef_data.USER_ID 
GROUP BY wp_users.user_email

确实使用GROUP_CONCAT将值列和GROUP BY连接到user_email上的分组。

答案 1 :(得分:2)

您可以像这样构建循环:

$table_rows = array();

foreach($statement as $row) {
    $ID = htmlspecialchars($row['ID']);
    $email = htmlspecialchars($row['user_email']);
    $value = htmlspecialchars($row['VALUE']);

    if (empty($table_rows[$ID])) {
        $table_rows[$ID] = array(
            'email' => $email,
            'values' => array(),
        );
    }

    $table_rows[$ID]['values'][] = $value;

}

或者您可以在查询中使用分组。