Как отфильтровать значения массивов из значений других массивов и вернуть новый массив? - PullRequest
5 голосов
/ 30 августа 2011

У меня есть два массива: $all_languages и $taken_languages.Один содержит все языки (например, 200 или что-то), но второй - языки, которые были выбраны ранее (от 0 до 200).

Мне нужно удалить все языки, которые были приняты ($taken_languages) из $all_languages и вернуть новый массив - $available_languages.

Мое решение состояло из двух циклов, но, во-первых, оно не работает должным образом, во-вторых, оно «не круто», и я считаю, что есть лучшие решения!Можете ли вы указать мне правильный путь?

Это то, что я делал раньше, но, как я уже сказал, это не работает, как ожидалось ...

if (!empty($taken_languages)) {

    foreach ($all_languages as $language) {

        foreach ($taken_languages as $taken_language) {

            if ($taken_language != $language) {

                $available_languages[] = $language;

                break;

            }

        }

    }

} else {

    $available_languages = $all_languages;

}

Спасибо всовет!

Ответы [ 2 ]

10 голосов
/ 30 августа 2011

PHP имеет встроенную функцию для этого (и почти все остальное: P)

$available_languages = array_diff($all_languages, $taken_languages);

Руководство по PHP (array_diff)

3 голосов
/ 30 августа 2011

Функция array_diff будет работать для вас.http://php.net/manual/en/function.array-diff.php

...