PHP按特定变量自定义排序

时间:2017-05-30 09:59:00

标签: php sorting

美好的一天, 以下代码按预期工作,并提供所需的结果:

                $f = 'Focus' . ' : ' .  $jobdemand_F . ' - ' . $foil_F_answer;
                $o = 'Organisation' . ' : ' .  $jobdemand_O . ' - ' . $foil_O_answer;
                $i = 'Interaction' . ' : ' .  $jobdemand_I . ' - ' . $foil_I_answer;
                $l = 'Load' . ' : ' .  $jobdemand_L . ' - ' . $foil_L_answer;

                $foilorder=array($f, $o, $i, $l);
                sort($foilorder);

                $arrlength=count($foilorder);
                for($x=0;$x<$arrlength;$x++)
                  {
                  echo $foilorder[$x];
                  echo "<br>";
                  }

输出结果为:

Focus : 2 - Below average

Interaction : 4 - Average

Load : 3 - Average

Organisation : 1 - Average

我想对第二个变量进行排序: 例如。 $jobdemand_F

使输出变为

Organisation : 1 - Average

Focus : 2 - Below average

Load : 3 - Average

Interaction : 4 - Average

请指出正确的方向。

2 个答案:

答案 0 :(得分:0)

您可以使用usort

来完成
function cmp($a, $b) {
 $anumber = substr($a, strpos($a, ": ") + 1);
 $anumber = substr($anumber , 1, 1);
 $bnumber = substr($b, strpos($b, ": ") + 1);
 $bnumber = substr($bnumber , 1, 1);

if ($anumber == $bnumber) {
    return 0;
}
return ($anumber < $bnumber) ? -1 : 1;
}


// sort
uasort($array, 'cmp');

答案 1 :(得分:0)

您可以使用usort代替sort函数按用户定义的比较对值进行排序。

使用sanitize filter - FILTER_SANITIZE_NUMBER_INT从字符串中获取数字:

usort($foilorder, function($a, $b) {
    $a = (int)filter_var($a, FILTER_SANITIZE_NUMBER_INT);
    $b = (int)filter_var($b, FILTER_SANITIZE_NUMBER_INT);
    return ($a < $b) ? -1 : 1;
});

注意:相反,您可以在构建字符串之前进行排序。假设您可以将变量声明为关联数组,然后对它们进行排序,将其构建为所需的字符串。这减少了这些复杂性,也减少了代码行。