使用具有重复值的另一个数组对数组进行排序

时间:2015-10-28 13:50:55

标签: php arrays sorting

我见过几个类似主题的问题,但大多数人使用arrays[1, 2, 3, 4, 5]进行排序,而不是我需要使用的[1, 1, 2, 1, 4] ,最大的数字首先出现,并删除了零。

实施例: [4, 3, 8, 0, 0]作为要排序的数组,["hello", "my", "name", "is", "indigo"]作为要排序的数组。 这应该变成: ["name", "hello", "my"] 因为零被删除了。

我的主要问题是我尝试过的大多数方法都会将一个数组中的值分配给另一个数组中的数字。例如:

[4, 1, 1, 4, 8]["hello", "my", "name", "is", "indigo"]

应该返回["indigo", "is", "hello", "my", "name"],但会返回["indigo", "hello", "hello", "my", "my"]或其他类似内容。

3 个答案:

答案 0 :(得分:1)

我认为你在找这样的东西?

$words = array("hello", "my", "name", "is", "indigo");
$order = array(0, 1, 3, 2, 4);
$result = array_map(function($o) use ($words){
    return $words[$o];
}, $order);

产生这个:

array(5) {
    [0] = string(5) "hello"
    [1] = string(2) "my"
    [2] = string(2) "is"
    [3] = string(4) "name"
    [4] = string(6) "indigo"
}

<强>更新

我已经重读了你的问题,但我仍然不确定你在寻找什么? 我已经更新了我的原始代码,但是现在删除了0,并且将最大数字排序到最小。虽然如果删除了0,你无法访问数组的第一个元素吗?

如果这不正确,也许你可以解释它做错了什么,以及它需要采取哪些不同的做法。我怀疑这个问题只是一种语言崩溃。

$words = array("hello", "my", "name", "is", "indigo");
$order = array(0, 0, 4, 4, 3, 1);

$order  = array_filter($order); // remove 0's
rsort($order);                  // Largest First
$result = array_map(function($o) use ($words){
    return $words[$o];
}, $order);

产生这个:

array(4) {
    [0] = string(6) "indigo"
    [1] = string(6) "indigo"
    [2] = string(2) "is"
    [3] = string(2) "my"
}

答案 1 :(得分:0)

您想使用rsort()

<强>溶液

$arrayVariable = array(1, 1, 2, 1, 4);

rsort($arrayVariable);

这是手册rsort()

答案 2 :(得分:0)

<强>更新

我终于弄清楚我在做什么有什么问题,并修复了它。对于那些对我想要做的事感到好奇的人(因为我显然对它很害羞),或者我最终是怎么做的,这是我的代码:

$words=array("hello","my","name","is","indigo");
$sort=array(4,3,8,0,0);
$count=0;
foreach($sort as $item){
    if ($item==0) {
        $count++;
    }
}
$cut=count($sort)-$count;
for($i=count($sort); $i>=$cut; $i--) {
    unset($sort[$i]);
    unset($words[$i]);
}
array_multisort($sort,$words);
$words=array_reverse($words);
foreach($words as $word){
    echo $word."<br>";
}

哪个输出:

name
hello
my