首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >array_multisort使用数组名作为参数

array_multisort使用数组名作为参数
EN

Stack Overflow用户
提问于 2017-03-31 10:42:32
回答 2查看 283关注 0票数 0

对不起,如果这是重复的,我已经尝试查看以前的文章,但也许我对php的有限理解受到了阻碍。

这可以按照数组2对数组1和3进行排序:

代码语言:javascript
复制
<?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-2

第三卷

游戏D4

很好。但我希望用户输入指定用作array_multisort()参数的数组列表,因此不能是文字。相反,我希望程序根据用户输入来决定列表中数组的顺序,然后命名数组的结果数组$supar (超级数组)。但是,当使用$supar作为array_multisort()参数时,不执行排序。

代码语言:javascript
复制
<?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";
}

?>

输出:

游戏D4

剪刀B-2

摇滚一首

第三卷

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

感谢您的耐心。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-03-31 12:02:47

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

array_multisort()通过引用获得它的参数(为了能够修改它们)。在构建用作call_user_func_array()参数的数组并将引用放入该数组时,您必须考虑这一点:

代码语言:javascript
复制
// 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

票数 1
EN

Stack Overflow用户

发布于 2017-03-31 11:13:14

您不能只使用PHP函数来完成这个任务。array_multisort()将不同的数组分别作为参数,您不能只传递一个带有预期参数的不同的东西。

你能做的就是写你自己的函数来为你做这件事。类似于:

代码语言:javascript
复制
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,然后执行

代码语言:javascript
复制
call_user_func_array('array_multisort', $supar);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43138701

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档