TL;DR
如何按key对数组进行排序/分组,而不会在数组中添加另一个级别(由jQuery插件解析的数据)?
细节
我正在构建一个数组,将其返回给某些<select>
DOM元素。
它以CC(发动机大小)作为参数,并将其用作关键字,问题在于之后对数组进行排序。
假设用户选择了这些CC范围:
50、100、125
50有32个选项可用
100有3个选项可用
125有12个选项可用
我的当前代码循环通过CC,执行SQL获取选项,并使用循环计数器创建以下关键字:
$options[$cc. $id] = $someValue;
这个方法可以按预期工作,但是我的输出显示的结果并不完全符合我需要的顺序(
CC ASC
- 所有50应该先显示在一起)。问题在于,50和32的组合生成的键值为 5031
,100和3的组合生成的键值为 1002
,125和12的组合生成的键值为 12511
。现在你们应该已经清楚地看到了问题。5031大于1002,所以在循环计数器传递9的情况下,50cc选项要比100cc选项更优。(仅供参考,示例输出为):
也许最初的问题出在我如何创建键上,但我尝试使用50cc Option 1
50cc Option 2
50cc Option 3
50cc Option 4
50cc Option 5
100cc Option 1
100cc Option 2
100cc Option 3
50cc Option 6
50cc Option 7
ksort
和几个不同的标志来尝试实现我的目标,但没有一个标志似乎能够针对我想要的内容。
SORT_REGULAR - compare items normally (don't change types)
SORT_NUMERIC - compare items numerically
SORT_STRING - compare items as strings
SORT_LOCALE_STRING - compare items as strings, based on the current locale. It uses the locale, which can be changed using setlocale()
SORT_NATURAL - compare items as strings using "natural ordering" like natsort()
SORT_FLAG_CASE - can be combined (bitwise OR) with SORT_STRING or SORT_NATURAL to sort strings case-insensitively
如何在不向数组添加另一层的情况下对键进行排序/分组(数据由需要特定格式的jQuery插件解析)?
编辑:完整脚本
<?php
if (strpos(PHP_OS, 'Linux') > -1) {
require_once $_SERVER['DOCUMENT_ROOT']. '/app/connect.php';
} else {
require_once getcwd(). '\\..\\..\\..\\..\\app\\connect.php';
}
$make = $_POST['make'];
$cc = $_POST['cc'];
$sql = 'SELECT * FROM `table`
WHERE `UKM_CCM` = :cc
AND `UKM_Make` = :make
ORDER BY `UKM_Model`, `UKM_StreetName`, `Year` ASC;';
$options = array();
foreach ($cc as $k => $value)
{
$res = $handler->prepare($sql);
$res->execute(array(':cc' => $value, ':make' => $make));
$data = $res->fetchAll(PDO::FETCH_ASSOC);
$i = 0;
if (count($data) > 0) {
foreach ($data as $result)
{
$arrayKey = sprintf('%03d%02d', $cc, $i);
$epid = $result['ePID'];
$make = $result['UKM_Make'];
$model = $result['UKM_Model'];
$cc = $result['UKM_CCM'];
$year = $result['Year'];
$sub = $result['UKM_Submodel'];
$street = $result['UKM_StreetName'];
$options[$arrayKey]['name'] = $make. ' ' .$model. ' ' .$cc. ' ' .$year. ' ' .$sub. ' ' .$street;
$options[$arrayKey]['value'] = $epid;
$options[$arrayKey]['checked'] = false;
$options[$arrayKey]['attributes']['data-epid'] = $epid;
$options[$arrayKey]['attributes']['data-make'] = $make;
$options[$arrayKey]['attributes']['data-model'] = $model;
$options[$arrayKey]['attributes']['data-cc'] = $cc;
$options[$arrayKey]['attributes']['data-year'] = $year;
$options[$arrayKey]['attributes']['data-sub'] = $sub;
$options[$arrayKey]['attributes']['data-street'] = $street;
$i++;
}
}
}
ksort($options, SORT_STRING);
echo json_encode($options);
WHERE IN ($values)
- 给我一点时间! :) - treyBake