Сравнения двух массивов по двум значениям

fenix-77

Новичок
Помогите пожалуйста. Есть два массива. Массив:

Код:
[1] Array(
    [0] => Array
        (
            [name] => name1
            [id] => 0
        )

    [1] => Array
        (
            [name] => name1
            [id] => 3
        )

    [2] => Array
        (
            [name] => name1
            [id] => 4
        )
    [3] => Array
        (
            [name] => name2
            [id] => 0
        )
...
)
и массив:

Код:
[2] Array(
    [0] => Array
        (
            [name] => name1
            [id] => 0
        )

    [1] => Array
        (
            [name] => name1
            [id] => 4
        )

    [2] => Array
        (
            [name] => name1
            [id] => 5
        )
    [3] => Array
        (
            [name] => name2
            [id] => 6
        )
...
)
Нужно сравнить два массива и выбросить с первого массива подмассивы [0],[2] и так далее, то есть все совпадения значения в которых [1][x]name = [2][y]name, [1][x]id = [2][y]id. Помогите пожалуйста.
 

fenix-77

Новичок
Подскажите пожалуйста как сделать такое - есть
Код:
[1]Array(
    [0] => Array
        (
            [name] => name1
            [id] => 0
            [some] => some1
        )

    [1] => Array
        (
            [name] => name1
            [id] => 0
            [some] => some2
        )

    [2] => Array
        (
            [name] => name1
            [id] => 1
            [some] => some3
        )
    [3] => Array
        (
            [name] => name2
            [id] => 0
            [some] => some4
        )
...
)
и
Код:
[2]Array(
    [0] => Array
        (
            [name] => name2
            [id] => 0
            [some] => some1
        )

    [1] => Array
        (
            [name] => name3
            [id] => 0
            [some] => some2
        )

    [2] => Array
        (
            [name] => name1
            [id] => 1
            [some] => some3
        )
    [3] => Array
        (
            [name] => name2
            [id] => 0
            [some] => some4
        )
...
)
Нужно сравнить два массива так что бы при [1][x]name = [2][y]name, [1][x]id = [2][y]id а [1][x]some = [2][y]some не учитывалось. При выполнении условия делалось что то, а при невыполнении другое.
 

AmdY

Пью пиво
Команда форума
а покажи как ты пробовал это сделать и что не получается. На форуме практикуется помощь, а не дача готовых решений.
 

fenix-77

Новичок
Я прошу помощи потому что не представляю как такое сделать. Если можете натолкнуть то буду благодарен.
 

Hello

Новичок
Я прошу помощи потому что не представляю как такое сделать. Если можете натолкнуть то буду благодарен.
PHP:
implode("", $a), implode("", $b)
В этом месте подставляй не оригинальные массивы, а создавай новые с нужными ключами.
 

fenix-77

Новичок
Насколько я понимаю то под мою задачу это:
Код:
array_udiff($arr1, $arr2, create_function(
    '$a,$b',
    'return strcmp( implode("", $a), implode("", $b) ); ')
    );
уже не подходит, ибо оно формирует массив только с уникальными данными, а мне нужно обрабатывать и дубли.
Знаю что не по фэн-шую, но я с поставленной задачей справился так:
PHP:
        foreach ($categories as $value) {
            $existing_category_id = 0;
            foreach ($existing_categories as $value2){
                if (($value['name'] == $value2['name'])&&($value['store_id'] == $value2['store_id'])){
                    $existing_category_id = $value2['category_id'];
                    break;
                }
            }
            if (empty($existing_category_id)){        
                //Do something
            } else {
                //Do something
            }
        }
Если кто знает более изящнейший метод буду благодарный за подказку.
 
Последнее редактирование:
Сверху