Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/239.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP自定义按特定变量排序_Php_Sorting - Fatal编程技术网

PHP自定义按特定变量排序

PHP自定义按特定变量排序,php,sorting,Php,Sorting,你好, 以下代码按预期工作,并给出预期结果: $f = 'Focus' . ' : ' . $jobdemand_F . ' - ' . $foil_F_answer; $o = 'Organisation' . ' : ' . $jobdemand_O . ' - ' . $foil_O_answer; $i = 'Interaction' . ' : ' . $jobdemand_I . '

你好, 以下代码按预期工作,并给出预期结果:

                $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>";
                  }
我想对第二个变量进行排序: 例如,
$jobdemand\u F

使输出成为

Organisation : 1 - Average

Focus : 2 - Below average

Load : 3 - Average

Interaction : 4 - Average

请给我指出正确的方向。

您可以使用
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');
函数cmp($a,$b){
$anumber=substr($a,strpos($a,“:”)+1);
$anumber=substr($anumber,1,1);
$b编号=substr($b,STRPO($b,“:”)+1);
$bnumber=substr($bnumber,1,1);
如果($anumber==$bnumber){
返回0;
}
回报率($a数量<$b数量)?-1:1;
}
//分类
uasort($array,'cmp');
您可以使用而不是
排序
函数通过用户定义的比较对值进行排序

使用-
FILTER\u SANITIZE\u NUMBER\u 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;
});
usort($foilorder,function($a,$b){
$a=(int)filter\u var($a,filter\u SANITIZE\u NUMBER\u int);
$b=(int)filter\u var($b,filter\u SANITIZE\u NUMBER\u int);
回报率($a<$b)?-1:1;
});

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

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