2015-05-05 2 views
0

У меня есть два разных массивов следующего формата:значения Совпадение из массива со значениями из другого массива

$customersList = Array(
    Array('id' => null, 'title' => 'JOHN LEGEND'), 
    Array('id' => null, 'title' => 'MARIAH CAREY'), 
    Array('id' => null, 'title' => 'JAY Z'), 
    Array('id' => null, 'title' => null), 
); 
$searchingValue = Array(
    Array('lastName' => 'TRAVOLTA', 'firstName' => 'JOHN'), 
    Array('lastName' => 'CAREY', 'firstName' => 'MARIAH'), 
    Array('lastName' => 'MODE', 'firstName' => 'DEPECHE'), 
    Array('lastName' => 'BRUCE', 'firstName' => 'WILL'), 
); 

Я хочу, чтобы они соответствовали значениям от $customersList со значениями из $searchingValue на основе следующего алгоритма: если ((FIRSTNAME1 == $ ПгвЬЫате 2 и $ lastName1 == $ lastName2) или (FIRSTNAME1 == lastName2 или lastName1 == FIRSTNAME2) истинно, то делать ничего не вставить новый клиент в $customersList

Мой код заключается в следующем:.

$ignoreIfFound = true; 
foreach ($searchingValue as $value) { 
$uploadedAlready = false; 
foreach ($customersList as $info) { 
    if ($info['id'] === null and $info['title']) { 
     list($paxLastName, $paxFirstName) = explode(' ', $info['title']); 
     if (($paxLastName == $value['lastName'] and $paxFirstName == $value['firstName']) or ($paxLastName == $value['firstName'] and $paxFirstName == $value['lastName'])) { 
     if (!$ignoreIfFound and !$uploadedAlready) { 
      $customersList[] = Array('id' => null, 'title' => $value['lastName'].' '.$value['firstName']); 
      $uploadedAlready = true; 

      } 
     } 
     else { 
      if (!$uploadedAlready) { 
       $customersList[] = Array('id' => null, 'title' =>$value['lastName'].' '.$value['firstName']); 
       $uploadedAlready = true; 
      } 
     } 
    } 
    else { 
     if (!$uploadedAlready) { 
      $customersList[] = Array('id' => null, 'title' => $value['lastName'].' '.$value['firstName']); 
      $uploadedAlready = true; 

     } 
    } 
}} 

Но он не работает должным образом. Для данного примера новые клиенты должны быть:

$customersList = Array(
    Array('id' => null, 'title' => 'JOHN LEGEND'), 
    Array('id' => null, 'title' => 'MARIAH CAREY'), 
    Array('id' => null, 'title' => 'JAY Z'), 
    Array('id' => null, 'title' => null), 
    Array('id' => null, 'title' => 'TRAVOLTA JOHN'), 
    Array('id' => null, 'title' => 'MODE DEPECHE'), 
    Array('id' => null, 'title' => 'BRUCE WILL'), 
); 

Заранее благодарю вас!

+0

это должно быть проще с помощью базы данных – Ghost

+1

Какой вид продукции вы получаете? –

+0

Мой вывод для $ ignoreIfFound = true: это массив со всеми значениями из searchValue, добавленный в список клиентовList, который не подходит. – OSOMAN

ответ

0

Построение карты всех уже учрежденным ключей (имя, фамилия и первая + LastName) и сверять:

<?php 
$alreadyInList = array(); 

foreach ($customersList as $customer) { 
    $alreadyInList[$customer["title"]] = true; 
    $firstLastname = explode(" ", $customer["title"]); 
    $alreadyInList[$firstLastname[0]] = true; 
    $alreadyInList[$firstLastname[1]] = true; 
} 

foreach($searchingValue as $search) { 
    if (array_key_exists($alreadyInList, $search["lastname"])) 
     continue; 
    if (array_key_exists($alreadyInList, $search["firstname"])) 
     continue; 
    if (array_key_exists($alreadyInList, $search["firstname"] . " " . $search["lastname"])) 
     continue; 

    $customersList[] = new array() // ... insert 

    $alreadyInList[$search["firstname"] . " " . $search["lastname"]] = true; 
    $alreadyInList[$search["lastname"]] = true; 
    $alreadyInList[$search["firstname"]] = true; 
} 
+0

Большое вам спасибо, я переписал этот код с запрошенным алгоритмом :) – OSOMAN