PHP Как исключить элементы из массива и вывести их
Я хотел бы вывести в результате 235. То есть из одного массива взять значение, сравнить его с другим, если они не равны вывести значение из 1 массива, но у меня почему то выводит все элементы из 1 массива. PHP:
<?php
$give_lvl =
array(
0 => array(
'lvl' => 1,
'exp' => 1000
),
1 => array(
'lvl' => 2,
'exp' => 1100
),
2 => array(
'lvl' => 3,
'exp' => 1200
),
3 => array(
'lvl' => 4,
'exp' => 1300
),
4 => array(
'lvl' => 5,
'exp' => 1400
),
);
$have_lvl = array(
0 => array(
'lvl' => 1,
'exp' => 1000
),
1 => array(
'lvl' => 4,
'exp' => 1100
),
);
foreach ($give_lvl as $key => $give) {
foreach ($have_lvl as $key => $have) {
if ($give['lvl'] != $have['lvl']) {
echo $give['lvl'];
break;
}
}
}
Ответы (1 шт):
Автор решения: Максим Степанов
→ Ссылка
Так как массив $have_lvl имеет два разных значения lvl, ваша проверка всегда будет совпадать во внутреннем цикле и, соответственно, выведутся все значения из первого массива.
Чтобы это исправить, Вы можете добавить флаг в вашу проверку, и после прохода внутреннего цикла по флагу определять, выводить что-то или нет:
foreach ($give_lvl as $give) {
$inHave = false;
foreach ($have_lvl as $have) {
if ($give['lvl'] === $have['lvl']) {
$inHave = true;
}
}
if (!$inHave) {
echo $give['lvl'];
}
}
Или воспользоваться какой-нибудь более удобной функцией и заодно сохранить массив измененный, например, array_filter:
$result = array_filter($give_lvl, function ($x) use ($have_lvl) {
foreach ($have_lvl as $y) {
if ($x['lvl'] === $y['lvl']) {
return false;
}
}
echo $x['lvl'];
return true;
});