пометить два php-массива с условием - PullRequest
0 голосов
/ 03 ноября 2018

У меня есть два ученика и оценки. Нужен выходной массив, такой как marks_sheet. Удалите все данные, которых нет в массиве меток, и вставьте новое поле меток. // имя этого массива студентов

Array    
    (
        [0] => Array
            (
                [userId] => user1
                [name] => Suman Mandal
                [age] => 20    

            )
        [1] => Array
            (

                [userId] => user2
                [name] => Amit Halder
                [age] => 30

            )
        [2] => Array
            (

                [userId] => user3
                [name] => Asif Rahman
                [age] => 25

            )
        [3] => Array
            (

                [userId] => user4
                [name] => Gopal Ghosh
                [age] => 21

            )
    )

// имя этого массива отметки

 Array   
    (
        [0] => Array
            (
                [userId] => user1 
                [marks]=>80 

            )
        [1] => Array
            (

                [userId] => user3  
                [marks]=>90          
            )

    )

Мне нужен такой вывод: // имя этого массива marks_sheet

 Array   
    (
        [0] => Array
            (
                [userId] => user1 
                [name] => Suman Mandal
                [age] => 20
                [marks]=>80 

            )
        [1] => Array
            (

                [userId] => user3  
                [name] => Asif Rahman
                [age] => 25
                [marks]=>90          
            )

    )

У меня немного знаний по php. Может быть, это так легко, но мне тяжело решить это ... пожалуйста, помогите мне

1 Ответ

0 голосов
/ 03 ноября 2018

Вы можете использовать array_replace_recusrive в индексированных массивах userId.

Сначала используйте array_column для индексации массивов по userId.

Затем используйте array_replace_recursive для объединения значений в массивах и сохранения индексов ключей обоих наборов массивов.

Наконец, используйте array_intersect_key, чтобы возвращать только значения массива из массива $marks.

Пример https://3v4l.org/adrYV

$students = array_column($students, null, 'userId');
$marks = array_column($marks, null, 'userId');
$marks_sheet = array_intersect_key(array_replace_recursive($students, $marks), $marks);

Результат

Array
(
    [user1] => Array
        (
            [userId] => user1
            [name] => Suman Mandal
            [age] => 20
            [marks] => 80
        )

    [user3] => Array
        (
            [userId] => user3
            [name] => Asif Rahman
            [age] => 25
            [marks] => 90
        )

)

Если вам нужно, чтобы конечный результат не индексировался userId, вы можете использовать array_values, который будет переиндексировать массив.

$marks_sheet = array_values(
    array_intersect_key(array_replace_recursive($students, $marks), $marks)
);

Результат

Array
(
    [0] => Array
        (
            [userId] => user1
            [name] => Suman Mandal
            [age] => 20
            [marks] => 80
        )

    [1] => Array
        (
            [userId] => user3
            [name] => Asif Rahman
            [age] => 25
            [marks] => 90
        )

)

В качестве альтернативы вы можете перебирать оценки и учеников для создания массива marks_sheet.

Пример https://3v4l.org/Xmg3a

$marks_sheet = [];
foreach ($marks as $mark) {
    foreach ($students as $student) {
        if ($student['userId'] === $mark['userId']) {
            $mark_sheet = $student;
            foreach ($mark as $key => $value) {
                $mark_sheet[$key] = $value;
            }
            $marks_sheet[] = $mark_sheet;
        }
    }
}

Результат

Array
(
    [0] => Array
        (
            [userId] => user1
            [name] => Suman Mandal
            [age] => 20
            [marks] => 80
        )

    [1] => Array
        (
            [userId] => user3
            [name] => Asif Rahman
            [age] => 25
            [marks] => 90
        )

)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...