函数使用array_multisort但不知道如何指定键

时间:2015-09-16 02:24:32

标签: php function array-multisort

这里对PHP很新,但无法找到帮助我的信息。

基本上我写了一个函数,用一天从我的mysql数据库中获取马的比赛时间并订购它们。所以我引入了3个值 - racedate,racevenue和section。分段是这样我可以指定我是否想要他们的最后200米时间,他们最后400米时间等等。

我运行查询然后将结果放入数组中。然后,我想按$ section的值对该数组进行排序。

我的问题是使用array_multisort创建数组$ times。我可以让它工作的唯一方法是硬编码时间200'指定要排序的内容。我真的希望能够按$ section变量进行排序,所以我可以在$ section传递的任何类型的列名上使用此函数(即time200,time400,time600等)。

使用$ divide而不是time200不起作用(这对于你更了解你正在做什么的人来说显而易见)但是我无法弄清楚原因。

感谢您的帮助!

LimitInternalRecursion

1 个答案:

答案 0 :(得分:0)

您的方法似乎很好。它对我有用。

function sectionalrank( $racedate, $racevenue, $sectional )
    {
    // simulate database query
    $racedata[] = array('horsename' => 67, 'time200' => 2, 'time400' => 8);
    $racedata[] = array('horsename' => 86, 'time200' => 1, 'time400' => 3);
    $racedata[] = array('horsename' => 85, 'time200' => 6, 'time400' => 9);
    $racedata[] = array('horsename' => 98, 'time200' => 2, 'time400' => 1);
    $racedata[] = array('horsename' => 86, 'time200' => 6, 'time400' => 6);
    $racedata[] = array('horsename' => 67, 'time200' => 7, 'time400' => 4);

    $array = array();
    foreach ($racedata as $row)
        {
        $array[] = $row;
        }

    $times = array();
    foreach ($array as $a)
        {
        $times[] = $a[$sectional];
        }

    array_multisort($times, SORT_ASC, $array);
    return $array;
    }

// Using $racedata to pass in the data.
echo json_encode( sectionalrank( 'racedate', 'racevenue', 'time200' ) ) . "\n";
echo json_encode( sectionalrank( 'racedate', 'racevenue', 'time400' ) ) . "\n";

Output:
[{"horsename":86,"time200":1,"time400":3},{"horsename":67,"time200":2,"time400":8},{"horsename":98,"time200":2,"time400":1},{"horsename":85,"time200":6,"time400":9},{"horsename":86,"time200":6,"time400":6},{"horsename":67,"time200":7,"time400":4}]
[{"horsename":98,"time200":2,"time400":1},{"horsename":86,"time200":1,"time400":3},{"horsename":67,"time200":7,"time400":4},{"horsename":86,"time200":6,"time400":6},{"horsename":67,"time200":2,"time400":8},{"horsename":85,"time200":6,"time400":9}]