2017-08-02 139 views
1

我有一个数组如下:排序数组排序

$aq=['jonathan','paul','andy','rachel']; 

然后,我有一个数组如下:

$bq=['rachel','andy','jonathan']; 

我需要的是使用第一的排序数组来排序我的第二个数组。

因此,对于这种情况下,所产生的数组排序应该是:

$cq=['jonathan','andy','rachel']; 

我开始工作,对使用的最高键,作为最高值(数组的头)的解决方案,因为什么进出口寻找是最高价值,但遇到问题,似乎更像是一个黑客,所以我认为排序是我在寻找的东西。

有没有在PHP一个简单的功能,可以根据我的第一阵列和阵列

+0

如果第一个顺序没有太大关系,那么您可以用词法排序(例如两个升序)来排序,这样第二个按照正确的顺序关联第一个数组。 – Peter

回答

2

在有相应的位置上我的数据进行排序,请尽量将短期和干净的解决方案使用array_intersect

$aq = ['jonathan','paul','andy','rachel']; 

$bq = ['rachel','andy','jonathan']; 

$cq = array_intersect($aq, $bq); 

var_export($cq); 

输出将是:

array (0 => 'jonathan', 2 => 'andy', 3 => 'rachel',) 
+0

这是一个优雅的答案。 – JakeParis

0

您将不得不使用自定义排序功能。在这里,我们抓住“排序”数组中相应条目的键并使用它们来排列工作阵列。

在这个例子中,如果在排序数组中不存在键,我们放弃(返回0)你可能希望定制这种行为,但是这应该给你一个大概的想法。

$order = ['jonathan','paul','andy','rachel']; 
$arrayToSort =['rachel','andy','jonathan']; 

usort($arrayToSort,function($a,$b) use ($order){ 
    if(! array_key_exists($a,$order)) return 0; 
    if(! array_key_exists($b,$order)) return 0; 

    if(array_search($a,$order) > array_search($b,$order) 
     return 1; 
    return -1; 
});