为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
达令说 2023-08-06 14:42:25
我想创建一个等于 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++;    }}
查看完整描述

1 回答

?
慕姐8265434

TA贡献1813条经验 获得超2个赞

如果我没记错的话,您可以将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);

});


查看完整回答
反对 回复 2023-08-06
  • 1 回答
  • 0 关注
  • 56 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信