Проверьте, совпадает ли любое значение в любых двух массивах с другим размером в php - PullRequest
0 голосов
/ 20 февраля 2020

У меня есть 2 массива -

$arr1 =

Array
(
    [0] => Array
        (
            [id] => 1
            [sender_email] => test1@test.com
            [to_email] => test@test.com
            [description] => 5390BF675E1464F32202B
            [created_at] => 2020-01-21 04:50:21
            [status] => 1
        )

    [1] => Array
        (
            [id] => 30
            [sender_email] => abcd@gmail.com
            [to_email] => test@test.com
            [description] => 729237A55E2EDCB80B18F
            [created_at] => 2020-01-27 12:51:34
            [status] => 1
        )
[2] => Array
        (
            [id] => 31
            [sender_email] => abc@gmail.com
            [to_email] => test@test.com
            [description] => 729237A55E2EDCB80B18F
            [created_at] => 2020-01-27 12:51:34
            [status] => 1
        )

)

$arr2 =
Array
(
    [0] => test1@test.com
    [1] =>  abb@abb.com
    [2] =>  abc@gmail.com
)

Я пытаюсь найти совпадающие значения из $ arr2, которые также существуют в $ arr1.

Я пытался с

if(array_intersect($arr2, $arr1)) {
            die('wrong');
        }

Но это показывает ошибку вроде -

 Notice: Array to string conversion in

Я думаю, из-за разницы в структуре. Как этого достичь? Будет очень полезно, если я смогу получить все совпадающие значения в одном массиве. Имя столбца всегда будет одинаковым, но я прошу не включать его в код.

Ответы [ 3 ]

1 голос
/ 20 февраля 2020

Эта рекурсивная функция проходит по всем элементам на каждой глубине и ищет элементы в $needle. Это returns an array with all matched values:

function array_search_recursive( $needle, $haystack, $strict = false, &$matches = array() )  {
  foreach( $haystack as $value )  {
    if( is_array( $value ) )  {
      array_search_recursive( $needle, $value, $strict, $matches );
    } else {
      if( in_array( $value, $needle, $strict ) ) {
        $matches[] = $value;
      }
    }
  }
  return $matches;
}

// Parameters
// $needle: The array containing the searched values
// $haystack: The array to search in
// $strict: If it is set to true, it will also perform a strict type comparison
// $matches: Is only needed for recursion

Использование:

$haystack = array(
  array(
    'id' => 1,
    'email' => 'test@mail.de'
  ),
  array(
    'id' => 2,
    'email' => 'mymail@web.de'
  ),
);

$needle = array( 'mymail@web.de', 1, 'lala@web.de' );

$matches = array_search_recursive( $needle, $haystack );

value of $matches:

Array
(
    [0] => 1
    [1] => mymail@web.de
)
1 голос
/ 20 февраля 2020

Функция array_intersect() сравнивает значения двух (или более) массивов и возвращает совпадения.

Эта функция сравнивает значения двух или более массивов и возвращает массив, содержащий записи из массив1, который присутствует в массиве2, массив3 и т. д. c.

$arr1 = array("alpha","omega","bravo","charlie","delta","foxfrot");
$arr2 = array("alpha","gamma","bravo","x-ray","charlie","delta","halo","eagle","foxfrot");  

$result = array_intersect($arr1, $arr2);
print_r($result);

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

$a1=array("a"=>"red","b"=>"green","c"=>"blue","d"=>"yellow");
$a2=array("e"=>"red","f"=>"black","g"=>"purple");
$a3=array("a"=>"red","b"=>"black","h"=>"yellow");

$result=array_intersect($a1,$a2,$a3);
print_r($result);

Демо

1 голос
/ 20 февраля 2020

Это должно работать:

$matches = []; // array which will contains matches
foreach($arr1 as &$el){ // loop through the elements
   if(array_intersect($arr2,$el)) array_push($matches, $el); //and if there is at least one elements as intersect of the two arrays, add it
}
...