php array_multisort使用数组名作为参数

时间:2017-03-31 10:42:33

标签: php arrays array-multisort

对不起,如果这是重复的,我试着查看以前的帖子,但也许我对php的理解有限。

这适用于按阵列2对数组1和3进行排序:

<?php

$ar[1] = array("game","scissors","rock","paper");
$ar[2] = array("D", "B", "A", "C");
$ar[3] =array("four","two","one","three");

array_multisort($ar[2],$ar[1],$ar[3]);

for ($j=0;$j<=3;$j++) {

    for ($i=1;$i<=3;$i++) {
  echo $ar[$i][$j]." ";
}
echo "\n";
}

?>

输出:

摇滚一个人  剪刀B两个
 纸C三  游戏D四个

精细。但我希望用作array_multisort()的参数的数组列表由用户输入指定,因此它不能是文字的。相反,我希望程序根据用户输入决定列表中数组的顺序,然后命名生成的数组数组$ supar(superarray)。但是当使用$ supar作为array_multisort()的参数时,不会执行排序。

<?php

$ar[1] = array("game","scissors","rock","paper");
$ar[2] = array("D", "B", "A", "C");
$ar[3] =array("four","two","one","three");


$supar = array($ar[2],$ar[1],$ar[3]);
array_multisort($supar);

for ($j=0;$j<=3;$j++) {

    for ($i=1;$i<=3;$i++) {
  echo $ar[$i][$j]." ";
}
echo "\n";
}

?>

输出:

游戏D四四  剪刀B两个
 摇滚一个人  纸C三

如何通过指定的$ ar数组{$ 1}对$ supar中的数组进行排序?

感谢您的耐心等待。

2 个答案:

答案 0 :(得分:1)

只有PHP函数才能做到这一点。 array_multisort()将不同的数组分别作为参数使用,并且不能仅仅使用内部的预期参数传递不同的内容。

你能做的就是编写自己的功能来为你做这件事。类似的东西:

function my_multisort($supar) {
    array_multisort($supar[2], $supar[1], $supar[3]);
}

$supar = array(
    array("game","scissors","rock","paper"),
    array("D", "B", "A", "C"),
    array("four","two","one","three")
);

my_multisort($supar);

修改

正如@axiac正确指出的那样,这基本上是一种重新发明call_user_func_array()的特殊方式。您可以根据需要简单地构建参数数组$supar,然后执行

call_user_func_array('array_multisort', $supar);

答案 1 :(得分:1)

如果使用call_user_func_array()在数组中包含参数,则可以调用array_multisort()(或任何其他函数)而不显式指定其参数。

array_multisort()通过引用获取其参数(以便能够修改它们)。当您构建用作call_user_func_array()的参数的数组并将引用放在此数组中时,您必须考虑这一点:

// Input arrays
$ar[1] = array("game", "scissors", "rock", "paper");
$ar[2] = array("D", "B", "A", "C");
$ar[3] = array("four", "two", "one", "three");

// Build the list of arguments for array_multisort()
// Use references to the arrays you want it to sort
$supar = array(&$ar[2], &$ar[1], &$ar[3]);

// Call array_multisort() indirectly
// This is the same as array_multisort($ar[2], $ar[1], $ar[3]);
call_user_func_array('array_multisort', $supar);

检查它的实际效果:https://3v4l.org/ptiog