php array_multisort 使用数组名作为参数

php array_multisort use array name as argument

抱歉,如果这是重复的,我已经尝试查看以前的帖子,但也许我对 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三

如何让array_multisort()按照指定的$ar数组对$supar中的数组进行排序?

感谢您的耐心等待。

仅使用 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);

如果使用 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