PHP сравнивает или ищет массив двух разных массивов

Я буду сравнивать два массива. $db это первый массив и $tr это второй массив. $tr сравнивать с$db, если значение $tr в $db, затем $result содержит значение $tr:

Первый массив $db

$db = [
['a','d'],
['a','e','f'],
['g'],
['b','e','d'],
['a','d','c','e'],
['d','g'],
['c','a','h','e','f','h'],
['g','e','h'],
['d','f','b','h','g']
];

Второй массив $tr

$tr = [
['a','b'],
['a','c'], //in
['a','d'], //in
['b','c'],
['b','d'], //in
['c','d'],
];

если $db а также $tr чем это производит

будут результаты $result как это:

$result = [
['a','c'],
['a','d'],
['b','d']
];

1

Решение

Счастливого Рождества!

Я не думаю, что PHP имеет стандартную функцию для решения этой проблемы (хотя, возможно, я пропустил одну для вас). Существует множество функций массива, но большинство из них не работают с вложенными массивами или выполняют только определенную задачу.

Но обычно легко написать функцию самостоятельно, используя, если возможно, встроенные функции.

Функция ниже перебирает каждый элемент в $ tr. Для каждого элемента он перебирает элементы $ dm. Затем он использует array_diff чтобы получить список предметов, отсутствующих в элементе dm. Если этот список пуст, это означает, что все элементы из первого массива содержатся во втором массиве, и первый массив должен быть в результате.

Я заметил, что эта функция также возвращает ['c', 'd'] в результате, потому что c а также d оба содержатся в одном из массивов $dm, Так что, может быть, вы пропустили это, или я не правильно понял спецификации. В любом случае, это должно помочь вам начать как минимум:

<?php

$db = [
['a','d'],
['a','e','f'],
['g'],
['b','e','d'],
['a','d','c','e'],
['d','g'],
['c','a','h','e','f','h'],
['g','e','h'],
['d','f','b','h','g']
];

$tr = [
['a','b'],
['a','c'], //in
['a','d'], //in
['b','c'],
['b','d'], //in
['c','d'],
];function nested_array_intersect($source, $comparewith) {
$result = array();

foreach ($source as $sItem) {

foreach ($comparewith as $cwItem) {

$missingItems = array_diff($sItem, $cwItem);

if (count($missingItems) === 0) {

$result[] = $sItem;
break;

}
}
}
return $result;
}

$result = nested_array_intersect($tr, $db);

print_r($result);
1

Другие решения

function compare($db, $tr)
{
$result = [];

foreach ($db as $val) {
$dbformat[] = implode("", $val);
}

foreach ($tr as $val) {
$pattern = "";
foreach($val as $one) {
$pattern .= $one.".*?";
}
foreach ($dbformat as $value) {
$countMatch = preg_match("/".$pattern."/", $value);
if($countMatch) {
$result[] = $val;
break;
}
}
}

return $result;
}
0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector