【问题标题】:Sort two arrays by another in PHP在PHP中对两个数组进行排序
【发布时间】:2018-01-21 05:24:16
【问题描述】:

我有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 来解决这个问题,但解决方案正在逃避我。

感谢您的任何见解!

【问题讨论】:

    标签: php arrays array-multisort


    【解决方案1】:

    制作对应于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

    【讨论】:

    • 那太好了。说得通。谢谢!
    【解决方案2】:

    您可以通过简单的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 是结果数组。

    【讨论】:

      猜你喜欢
      • 2019-01-12
      • 2016-07-26
      • 1970-01-01
      • 1970-01-01
      • 2011-04-23
      • 2014-06-13
      • 2010-10-26
      相关资源
      最近更新 更多