【问题标题】:Sort matrix A according to the ordering of matrix B根据矩阵B的排序对矩阵A进行排序
【发布时间】:2020-11-04 03:54:33
【问题描述】:

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

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

我的数组 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++;
    }
}

【问题讨论】:

  • 为什么用Javascript标记?
  • 因为我编写了 php 和 javascript,任何算法都可以帮助我。

标签: javascript php arrays sorting


【解决方案1】:

如果我没记错的话,您可以使用 usort 和自定义比较功能,使用 array_search 通过 $array_A 的值查找来自 $array_B 的键,然后比较它们。

$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 demo

在 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);
});

【讨论】:

    猜你喜欢
    • 2021-06-29
    • 1970-01-01
    • 1970-01-01
    • 2018-04-09
    • 2019-03-28
    • 2019-02-20
    • 1970-01-01
    • 2015-10-12
    • 2012-08-17
    相关资源
    最近更新 更多