在 PHP 中对两个数组进行排序

Sort two arrays by another in PHP

我有two data arrays,每个都有相同数量的元素。还有一个 sorting 数组,第一个数组中的值为 unique elements

数据数组可以有任意数量的元素,但每个元素的数量完全相同。

我希望两个数据数组都按排序数组排序。

示例:

array1(‘group1’,’group1’,’group3’,’group1’,’group2’); (5 elements)

array2(‘data1’,’data3’,’data2’,’data4’,’data5’); (5 elements)

sortArray(‘group2’,’group1’,’group3’);(3 elements, no particular order, one each from array1)

结果将是:

array(‘group2’,’group1’,’group1’,’group1’,’group3’);

array(‘data5’,’data1’,’data3’,’data4’,’data2’);

我试图让这个与 array_multisort 一起工作,但解决方案正在逃避我。

感谢您的任何见解!

您可以使用简单的 foreach 循环来做到这一点。

    $arr1 = array(1,1,3,1,2);
    $arr2 = array(1,3,2,4,5);
    $sortArr=  array(2,1,3);
    $new_arr1 = array();
    $new_arr2 = array();
    foreach($sortArr as $s){
        foreach($arr1 as $key => $value){
            if($s==$value){
                array_push($new_arr1, $value);
                array_push($new_arr2, $arr2[$key]);

            }
        }
    }

$new_arr1$new_arr2 是结果数组。

创建对应于 array1 的临时数组,其中为 array1 的每个元素设置它在 array2 中的索引。并一次对所有数组进行排序

$array1 = array('group1','group1','group3','group1','group2'); 
$array2 = array('data1','data3','data2','data4','data5'); 
$sortArray = array('group2','group1','group3');

$flip = array_flip($sortArray);
$sort = [];
foreach($array1 as $x) {
  $sort[] = $flip[$x];      // [1,1,2,1,0]
}
array_multisort($sort, $array1, $array2);

print_r($array1);
print_r($array2);

demo