@Alex7878

Не могу разобраться с двойным циклом, что не так?

Доброго времени суток! Помогите разобраться с двойным циклом, не пойму почему так происходит. Нужно сформировать массив, в котором нет совпадений по значению другого. Вот код:
$array = array(
    array(
        'field'=> 'asd2795432',
        'id' => '2795432'
    ),
    array(
        'field' => 'asd2796079',
        'id' => '2796079'
    ),
    array(
        'field' => 'asd2793624',
        'id' => '2793624'
    ),
    array(
        'field' => 'asd27936245',
        'id' => '2793645'
    )
);

$array2 = array(
    '2795432',
    '2796079'
);

foreach ($array as $item) {
    $value['field'] = $item['field'];
    $value['id'] = $item['id'];

    foreach ($array2 as $key) {
        if ( $key == $value['id'] ) $res[] = $value; //если так выводить, все хорошо! Выводит только то что есть в другом массиве(см. вывод1)
        // if ( $key !== $value['id'] ) $res[] = $value; //как только не пробовал, и брейк и if/else(см. вывод2)
    }
}

print_r($res);


Вывод 1 :
Array
(
    [0] => Array
        (
            [field] => asd2795432
            [id] => 2795432
        )

    [1] => Array
        (
            [field] => asd2796079
            [id] => 2796079
        )

)

Фильтруется по нужным значениям как надо, а вот наоборот почему-то проблема
Вывод 2 (еще и дублируются):
Array
(
    [0] => Array
        (
            [field] => asd2795432
            [id] => 2795432
        )

    [1] => Array
        (
            [field] => asd2796079
            [id] => 2796079
        )

    [2] => Array
        (
            [field] => asd2793624
            [id] => 2793624
        )

    [3] => Array
        (
            [field] => asd2793624
            [id] => 2793624
        )

    [4] => Array
        (
            [field] => asd27936245
            [id] => 2793645
        )

    [5] => Array
        (
            [field] => asd27936245
            [id] => 2793645
        )
)


Предполагаю, что связано что то со ссылками. Но вот понять не могу.
Спасибо!
  • Вопрос задан
  • 254 просмотра
Решения вопроса 1
dimasmagadan
@dimasmagadan
предлагаю поменять велосипед на встроенную функцию
php.net/manual/ru/function.in-array.php
и дальше можно цикл вот так делать
foreach ($array as $item) {
if( !in_array( $item['id'], $array2 ) ) {
$res[]=$item;
}
}


сравнить массивы можно и другими способами. пара ссылок для дальнейшего изучения
php.net/manual/ru/function.array-diff.php
php.net/manual/ru/function.array-map.php
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы