对不起,如果这是重复的,我试着查看以前的帖子,但也许我对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两个精细。但我希望用作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两个如何通过指定的$ ar数组{$ 1}对$ supar中的数组进行排序?
感谢您的耐心等待。
答案 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