基于其他数组排序的排序数组

时间:2017-08-02 20:30:07

标签: php arrays sorting

我有一个数组如下:

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

然后我有一个数组如下:

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

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

因此,对于此实例,生成的排序数组应为:

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

我开始研究一个使用最高键作为最高值(数组的头部)的解决方案,因为我正在寻找的是最高值,但是遇到了问题,看起来更像是一个黑客,所以我认为排序是我正在寻找什么。

php中是否有一个简单的函数可以根据我的第一个数组对数据进行排序,并且数组中各自的位置

2 个答案:

答案 0 :(得分: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', )

答案 1 :(得分: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;
});