我使用下面的代码从数据库中获取数据并且工作正常,但我的问题是结果包含重复值而没有按我的意愿排列。
1
user_id "1"
Office "مؤسسة السنان للعسل الطبيعي ( عمان )"
address_user "سلطنة عمان - بانوراما مول"
2
user_id "1"
Office "مؤسسة السنان للعسل الطبيعي ( عمان )"
address_user "سلطنة عمان - بانوراما مول"
profile_photo "profile_photo.jpg"
3
user_id "1"
Office "مؤسسة السنان للعسل الطبيعي ( عمان )"
address_user "سلطنة عمان - بانوراما مول"
profile_photo "profile_photo.jpg"
cover_photo "cover_photo.jpg"
结果
1
user_id: "1"
Office: "officename"
profile_photo: "profile.jpg
user_address: "address"
websiteurl: "url"
........
2
user_id: "2"
Office: "officename"
profile_photo: "profile.jpg
user_address: "address"
websiteurl: "url"
但我想得到
{{ absolute_url() }}
提前致谢
答案 0 :(得分:0)
首先,您的代码会出现SQL错误。这是因为您选择字段user_id, meta_key, meta_value
,但是您按user_id
对结果进行分组。 不允许直接选择未分组的字段。要解决此问题,请删除GROUP BY
子句。您需要以PHP编程方式对结果进行分组。
您在代码中遇到的问题是,您在$output
循环中同时填充了while
数组。
while($row=mysqli_fetch_assoc($sql)) {
$subArray=array();
$output[$row['meta_key']] = $row['meta_value'];
$subArray['user_id']=$row['user_id'];
$subArray['Office']=$output['Office'];
...
$subArray['membertype']=$output['membertype'];
$newarray[]= array_filter($subArray);
}
如您所见,您只为每行填充$output
数组的一个字段,同时访问每行的所有字段。
您想要做的是将user_id
所有的行分组。为此,您可以使用user_id
作为输出数组中的键,并将所有元数据添加到其引用的内部数组中:
$newarray = [];
while($row=mysqli_fetch_assoc($sql)) {
if (!array_key_exists($row['user_id'], $newarray) {
// Adds a new inner array for the specific user and initializes it with the user_id
$newarray[$row['user_id']] = ['user_id' => $row['user_id']];
}
if (!empty($row['meta_value']) || is_numeric($row['meta_value'])) {
// Adds a specific meta value to an inner user array
$newarray[$row['user_id']][$row['meta_key']] = $row['meta_value'];
}
}
使用此代码,您将获得所需的输出。通过将empty()
与is_numeric()
结合使用作为将元值添加到内部数组的条件,可以消除使用array_filter()
的必要性,因为不会存储任何虚假值。如果您的元值也可能是布尔值,则应将|| is_boolean()
添加到此条件中。