2016-12-25 6 views
1

Я сравню два массива. $db - это первый массив, а $tr - второй массив. $tr по сравнению с $db. если значение $tr в $db. Затем $result содержит значение $tr:PHP сравнение или поиск массива из двух разных массивов

Первый массив $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'] 
    ]; 
+0

Что такое ваше определение «содержит»? У меня есть фрагмент кода, который я бы хотел опубликовать, но он также добавляет '['c', 'd']' к результату, потому что 'c' и 'd' содержатся в '['a', 'd', 'c', 'e'] '. Это правильно? – GolezTrol

+0

например: ['a', 'b'] находится в ['a', 'd', 'b'], затем в переменную $ result добавляется ['a', 'b']. –

ответ

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); 
+0

Merry Christmas. Спасибо –

0
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; 
} 
Смежные вопросы