我在PHP中有一个mysql_fetch_row数组,我想根据它的一个列值对它进行排序。我完全不知道怎么做。请帮忙!谢谢。
我有这样的事情:
$doctors = array();
if ($numrows > 0) {
while ($row = mysql_fetch_row($result)) {
$doc_lat = $row[9];
$doc_lng = $row[10];
$dist = distance($user_lat, $user_lng, $doc_lat, $doc_lng, "K");
$dist = round($dist, 1);
if ($dist < 15) {
$row[19] = $dist;
$doctors[] = $row;
}
}
}
在上面的代码中,我是doctor [],它是一个mysql_fetch_row数组,我想根据我添加到$ row的第19个值($ dist)对其进行排序。
答案 0 :(得分:2)
试试这个
$doctors['compare'] = $row;
$arr_common_all_new=sortArrayByColumValues($doctors, 'compare', DESC_NUM, $sticky_fields ) ;
function sortArrayByColumValues($arr, $field, $sort_type, $sticky_fields = array() ) {
$i = 0;
foreach ($arr as $value) {
$is_contiguous = true;
if(!empty($grouped_arr)) {
$last_value = end($grouped_arr[$i]);
if(!($sticky_fields == array())) {
foreach ($sticky_fields as $sticky_field) {
if ($value[$sticky_field] <> $last_value[$sticky_field]) {
$is_contiguous = false;
break;
}
}
}
}
if ($is_contiguous)
$grouped_arr[$i][] = $value;
else
$grouped_arr[++$i][] = $value;
}
$code = '';
switch($sort_type) {
case ASC_AZ:
$code .= 'return strcasecmp($a["'.$field.'"], $b["'.$field.'"]);';
break;
case DESC_AZ:
$code .= 'return (-1*strcasecmp($a["'.$field.'"], $b["'.$field.'"]));';
break;
case ASC_NUM:
$code .= 'return ($a["'.$field.'"] - $b["'.$field.'"]);';
break;
case DESC_NUM:
$code .= 'return ($b["'.$field.'"] - $a["'.$field.'"]);';
break;
}
$compare = create_function('$a, $b', $code);
foreach($grouped_arr as $grouped_arr_key=>$grouped_arr_value)
usort ( $grouped_arr[$grouped_arr_key], $compare );
$arr = array();
foreach($grouped_arr as $grouped_arr_key=>$grouped_arr_value)
foreach($grouped_arr[$grouped_arr_key] as $grouped_arr_arr_key=>$grouped_arr_arr_value)
$arr[] = $grouped_arr[$grouped_arr_key][$grouped_arr_arr_key];
return $arr;
}
答案 1 :(得分:1)
您可以使用usort
函数使用用户定义的比较选项对数组进行排序:
function cmp($a, $b)
{
if ((int)$a[0] == (int)$b[0]) {
return 0;
}
return ((int)$a[0] < (int)$b[0]) ? -1 : 1;
}
$a = mysql_fetch_row($result);
usort($a, "cmp");
表示数组。或者
function cmp($a, $b)
{
if ((int)$a["Id"] == (int)$b["Id"]) {
return 0;
}
return ((int)$a["Id"] < (int)$b["Id"]) ? -1 : 1;
}
$a = mysql_fetch_assoc($result);
usort($a, "cmp");
用于关联数组。
答案 2 :(得分:1)
使用此查询
$results = $mysqli->query("SELECT * FROM `products` ORDER BY `id` ASC");
//Output query results
while($row = $result->fetch_assoc()){
echo $row['username'] . '<br />';
}
In php use this code
您可以使用usort()比较功能。
$order = array(19);
usort($array, function ($a, $b) use ($order) {
$pos_a = array_search($a['id'], $order);
$pos_b = array_search($b['id'], $order);
return $pos_a - $pos_b;
});
注意:使用 MySQLI 来避免劫持......