【发布时间】:2012-02-23 12:35:41
【问题描述】:
我正在尝试计算数据库中用户的百分位数。为此,我需要对 $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] 时它确实有效,但这对我来说并不是正确的解决方案!
有人可以帮忙吗?提前致谢!
【问题讨论】:
-
假设您尝试按用户 ID 排序,
$data在这里看起来不是多维的,为什么不能使用asort()? php.net/manual/en/function.asort.php -
不,我正在尝试按值排序(
number_format([...])等)。但我想保留用户 ID 作为键,以便以后可以将用户 ID 与他们的百分位值联系起来。 -
刚刚说过...
asort()似乎做得很好! -
抱歉,我不是说按用户ID排序,这是关键,
asort()会按数组的值排序并保持关联。
标签: php arrays string variables casting