在PHP中对mysql_fetch_row或mysql_fetch_assoc进行排序

时间:2015-06-15 04:30:36

标签: php mysql sorting

我在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)对其进行排序。

3 个答案:

答案 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;
});

参考Php usort

  

注意:使用 MySQLI 来避免劫持......