2015-10-28 128 views
-2

我见过几个类似主题的问题,但其中大多数使用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"],或诸如此类的话。

+0

使用php数组** sort()**函数 –

+0

rsort()和array_filter()? –

+0

尝试自己的事情,让我们知道。 –

回答

0

要使用rsort()

解决方案

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

rsort($arrayVariable); 

这里手动rsort()

+0

你误解了我的问题。我已经编辑它使其更容易理解,但您可能想要删除此问题。 – Hate9

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" 
} 
+0

这实际上几乎可行,但它将'[0,0,4,4]'+'[“text1”,“text2”,“text3”,“text4”]分配为'[“text1”,“ text1“,”text3“,”text3“]' – Hate9

+0

@ Hate9这正是我以为你想要的?如果不是,你需要详细说明。 – Christian

+0

我的第一个问题太含糊,但我编辑它以使其更有意义。 – Hate9

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