поиск по ключу и значению в массиве php по значению из другого массива

#php #multidimensional-array

#php #многомерный массив

Вопрос:

У меня есть ссылочный массив, подобный этому (объем данных динамический, около 3000 записей)

 Array
(
    [0] => Array
        (
            [DEPT] => FIN
            [KEYCODE] => AAAAA
            [TYPE] => 7
        )

    [1] => Array
        (
            [DEPT] => SALE
            [KEYCODE] => BBBBB
            [TYPE] => 16
        )

    [2] => Array
        (
            [DEPT] => SCM
            [KEYCODE] => CCCCC
            [TYPE] => 1
        )
)
 

и используйте значение «ТИП» для поиска ключей «[9][7][16][1]» и значение «KEYCODE» для поиска значения вышеуказанных ключей в следующем массиве. (динамический, около 5000 записей)

 Array
(
    [0] => Array
        (
            [NAME] => Nick
            [9] => GGGGG
            [7] => AAAAA
            [16] => MMMMM
            [1] => KKKKK
        )
    [1] => Array
        (
            [NAME] => Chris
            [9] => PPPPP
            [7] => BBBBB
            [16] => ZZZZZ
            [1] => RRRRR
        )
    [2] => Array
        (
            [NAME] => Cathy
            [9] => SSSSS
            [7] => UUUUU
            [16] => JJJJJ
            [1] => AAAAA
        )
    [3] => Array
        (
            [NAME] => Allen
            [9] => FFFFF
            [7] => DDDDD
            [16] => WWWWW
            [1] => CCCCC
        )
)
 

выходной массив должен быть

 Array
(
    [0] => Array
        (
            [NAME] => Chris
            [9] => PPPPP
            [7] => HHHHH
            [16] => ZZZZZ
            [1] => RRRRR
        )
    [1] => Array
        (
            [NAME] => Cathy
            [9] => SSSSS
            [7] => UUUUU
            [16] => JJJJJ
            [1] => XXXXX
        )
)
 

«Ник» имеет элемент [7] => ААААА, а «Аллен» имеет элемент [1] => CCCCC, поэтому удалите из массива данных.
Я знаю, как удалить элемент массива, но не знаю, как реализовать сравнение и поиск по паре ключ / значение из другого массива.

Комментарии:

1. Если я не ошибаюсь, вы хотите удалить элементы из второго массива, если функция поиска соответствует [КЛЮЧЕВОМУ КОДУ] и [ТИПУ] ??

2. да, удалить [ИМЯ] [9] [7] [16] [1] при нахождении полного совпадения элементов [KEYCODE] и [TYPE]

3. Вы хотите найти запись KEYCODE из первого массива на основе TYPE , а затем удалить всю запись во втором на основе найденной KEYCODE ? Может ли быть несколько значений KEYCODE для одного и того же TYPE ?

4. [TYPE, KEYCODE] сначала массив уникален. Но во втором массиве может быть тот же «ТИП», но другой «КОД ключа», я отредактировал второй массив для более близкого реального массива данных.

Ответ №1:

Насколько я понял из вашего вопроса, вот простое решение для вашей требуемой задачи:

     $firstArr = array(
        0 => array(
            "DEPT" => 'FIN',
            'KEYCODE' => 'AAAAA',
            'TYPE' => 7
        ),
        1 => array(
            'DEPT' => 'SALE',
            'KEYCODE' => 'BBBBB',
            'TYPE' => 16
        ),
        2 => array(
            'DEPT' => 'SCM',
            'KEYCODE' => 'CCCCC',
            'TYPE' => 1
        )
    );

    $secondArr = array(
        0 => array(
            'NAME' => 'Nick',
            9 => 'GGGGG',
            7 => 'AAAAA',
            16 => 'MMMMM',
            1 => 'KKKKK',
        ),
        1 => array(
            'NAME' => 'Chris',
            9 => 'PPPPP',
            7 => 'HHHHH',
            16 => 'ZZZZZ',
            1 => 'RRRRR'
        ),
        2 => array(
            'NAME' => 'Cathy',
            9 => 'SSSSS',
            7 => 'UUUUU',
            16 => 'JJJJJ',
            1 => 'XXXXX'
        ),
        3 => array(
            'NAME' => 'Allen',
            9 => 'FFFFF',
            7 => 'DDDDD',
            16 => 'WWWWW',
            1 => 'CCCCC'
        )
    );

    foreach($firstArr as $row){
        foreach($secondArr as $i => $que){
            if(array_key_exists($row['TYPE'], $que) amp;amp; $row['KEYCODE'] == $que[$row['TYPE']]){
                unset($secondArr[$i]); // deleting selected item from the array...
            }
        }
    }

    echo '<pre>'; 
    print_r($secondArr);
    echo '</pre>';
 

Вывод приведенного выше кода:

 Array
(
    [1] => Array
    (
        [NAME] => Chris
        [9] => PPPPP
        [7] => HHHHH
        [16] => ZZZZZ
        [1] => RRRRR
    )

[2] => Array
    (
        [NAME] => Cathy
        [9] => SSSSS
        [7] => UUUUU
        [16] => JJJJJ
        [1] => XXXXX
    )

)