根据矩阵 B 的顺序对矩阵 A 进行排序

我想创建一个等于 A 的新数组(或对数组 A 进行排序),但按照 B 的顺序。


我只删除数组 A 中不在数组 B 中的元素,但它们不会按照数组 B 的顺序保留在数组 A 中。


我的数组A是:


$ array_A [0] ['name'] = Robson;


$ array A [0] ['value'] = ROB;

 

$ array_A [1] ['name'] = Morticia;


$ array A [1] ['value'] = MORT;

我的数组 B 是:


$ array_B [0] = "Morticia";

 

$ array_B [1] = "Robson";

我想创建一个等于 A 的新数组(或对数组 A 进行排序),但按照 B 的顺序。


预期结果:


$array_A[0]['name'] = Morticia; 


$array_A[0]['value'] = MORT;


$array_A[1]['name'] = Robson; 


$array_A[1]['value'] = ROB;

我今天的代码是:


if(!empty($array_A)){

    if (!empty($obj->allnames)){

        $array_B = explode(",", $obj->allnames); 

        **// You have to sort array_A by array_B

    }

    $x=0;

    foreach ($array_A as $value) {

        if (!empty($array_B)){

            if (!in_array($value->f_name,$array_B)){

                unset($array_A[$x]);

            }

        }

        $x++;

    }

}


达令说
浏览 94回答 1
1回答

慕姐8265434

如果我没记错的话,您可以将usort$array_B与自定义比较函数一起使用,通过使用array_search的值查找键$array_A,然后比较它们。$array_A[0]['name'] = "Robson";$array_A[0]['value'] = "ROB";$array_A[1]['name'] = "Morticia";$array_A[1]['value'] = "MORT";$array_B[0] = "Morticia";$array_B[1] = "Robson";usort($array_A, function($a, $b) use ($array_B) {    return array_search($a['name'], $array_B) > array_search($b['name'], $array_B);});print_r($array_A);输出Array(    [0] => Array        (            [name] => Morticia            [value] => MORT        )    [1] => Array        (            [name] => Robson            [value] => ROB        ))PHP演示在 php 7 中你还可以使用<=>spaceship 操作符usort($array_A, function($a, $b) use ($array_B) {    return array_search($a['name'], $array_B) <=> array_search($b['name'], $array_B);});
打开App,查看更多内容
随时随地看视频慕课网APP