Сортировать матрицу A согласно порядку матрицы B - PullRequest
1 голос
/ 14 июля 2020

Я хочу создать новый массив, равный A (или отсортировать массив A), но в порядке B.

Я удаляю только элементы массива A, когда они не в массиве B, но они не остаются в массиве 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++;
    }
}

1 Ответ

0 голосов
/ 14 июля 2020

Если я не ошибаюсь, вы можете использовать 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 вы также можете использовать космический корабль <=> оператор

usort($array_A, function($a, $b) use ($array_B) {
    return array_search($a['name'], $array_B) <=> array_search($b['name'], $array_B);
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...