#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
)
)