美好的一天, 以下代码按预期工作,并提供所需的结果:
$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
请指出正确的方向。
答案 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;
});
注意:相反,您可以在构建字符串之前进行排序。假设您可以将变量声明为关联数组,然后对它们进行排序,将其构建为所需的字符串。这减少了这些复杂性,也减少了代码行。