我正在尝试计算数据库中用户的百分位数。为了做到这一点,我有一个$data
数组,我需要排序。
我有一个包含User_ID
,Total_User_Orders
和Total_Orders
的查询对象。以下是代码到目前为止的显示方式:
// Loop through the users
foreach($query->result() as $row)
{
(string)$user_id = (string)$row->user_id;
$data[$user_id] = number_format((($row->total_user_orders/$row->total_orders)*100), 5);
}
// Sort the $data array
array_multisort($data);
print_r($data);
我认为应该做的是将$row->user_id
(一个int)作为字符串进行类型转换。然后,$data[$user_id]
索引应设置为字符串 - 右...?
当我使用array_multisort
对数组进行排序时,它会对其进行排序,就像索引是整数而不是字符串一样。这意味着它失去了索引。
array_multisort()
状态的PHP手册,"关联(字符串)键将被维护,但数字键将被重新编入索引。" 。我也尝试使用array_multisort($data, SORT_STRING)
,但会出现相同的输出。但是 - 当我$data['#'.$user_id]
时,它确实有效,但这对我来说并不是一个合适的解决方案!
有人可以帮忙吗?提前谢谢!
答案 0 :(得分:2)
我认为你过于复杂。没有测试,我认为像这样索引$data
- 数组会起作用:
$data[(string)$row->user_id] = ...
或
$data[''.$user_id] = ...
修改强>
否则,您可以构建多维数组并按其中一个索引排序,如下所示:
foreach($query->result() as $row) {
$data[] = array(
'user_id' => $row->user_id,
'percent' => number_format((($row->total_user_orders/$row->total_orders)*100), 5);
);
}
或者您可以按百分比编制索引并按键排序(使用ksort()
):
foreach($query->result() as $row) {
$data[number_format((($row->total_user_orders/$row->total_orders)*100), 5)] = $row->user_id];
}
如果多个用户具有相同的百分比,则最后一个解决方案可能会很危险。
就个人而言,我可能会采用上面提到的asort()
解决方案。
答案 1 :(得分:1)
正如我的评论中所述,array_multisort()
不是您在此之后所做的。您没有多个数组或多维数组。
要维护数组中的key => value
关联并使用asort()对内容进行排序。
foreach ($query->result() as $row) {
$percent = ($row->total_user_orders / $row->total_orders) * 100;
$data[$row->user_id] = number_format($percent, 5);
}
asort($data);
如果您希望在排序后降低{%3}的百分比。
$data = array_reverse($data, true);