2017-06-17 1 views
-1

Ich habe ein assoziatives mehrdimensionales Array:Wie können doppelte Werte in einem mehrdimensionalen assoziativen Array erkannt werden?

Array 
(
    [0] => Array 
     (
      [customer_name] => John Dow 
      [customer_email] => [email protected] 
      [customer_mobile] => 1236547895 
      [birth_date] => 12/1/1996 
      [status] => Enable 
     ) 

    [1] => Array 
     (
      [customer_name] => Alex 
      [customer_email] => [email protected] 
      [customer_mobile] => 4563214785 
      [birth_date] => 19/1/1996 
      [status] => Enable 
     ) 

    [2] => Array 
     (
      [customer_name] => Arina 
      [customer_email] => [email protected] 
      [customer_mobile] => 963214785 
      [birth_date] => 25/1/1996 
      [status] => Enable 
     ) 

    [3] => Array 
     (
      [customer_name] => Atom 
      [customer_email] => [email protected] 
      [customer_mobile] => 5214789632 
      [birth_date] => 12/1/1998 
      [status] => Enable 
     ) 

    [4] => Array 
     (
      [customer_name] => Jennifer 
      [customer_email] => [email protected] 
      [customer_mobile] => 4563214785 
      [birth_date] => 12/2/1996 
      [status] => Enable 
     ) 
) 

Jetzt möchte ich ähnliche Werte in customer_mobile und customer_email voneinander inspizieren Entlassungen zu reduzieren. Kontaktnummer und E-Mail-Adressen müssen nicht redundant sein.

Bitte führen Sie mich, wie kann ich das erreichen? Thanks :)

+0

Post das gewünschte Ergebnis – RomanPerekhrest

+0

Ich will kein Ergebnis. Ich möchte nur überprüfen, ob ein Kunde doppelte Telefonnummer sowie E-Mail-Adresse haben. es gibt als Flag zurück - true bedeutet, dass dieses Array enthält Redundanz –

+0

Sie schrieb * es als Flag zurück * - ein Flag für alle Elemente oder für jedes Element separat? – RomanPerekhrest

Antwort

0

Einfache Lösung:

<?php 

$data = [ 
    [ 
    'name' => 'name 1', 
    'phone' => '12341234', 
    'email' => '[email protected]' 
    ], 
    [ 
    'name' => 'name 2', 
    'phone' => '12341234', 
    'email' => '[email protected]' 
    ], 
    [ 
    'name' => 'name 3', 
    'phone' => '4322342', 
    'email' => '[email protected]' 
    ], 
    [ 
    'name' => 'name 4', 
    'phone' => '1234123423', 
    'email' => '[email protected]' 
    ], 
    [ 
    'name' => 'name 5', 
    'phone' => '12341266634', 
    'email' => '[email protected]' 
    ], 
]; 

$phones = []; 
$emails = []; 
foreach ($data as $key => $contact) { 
    if (array_search($contact['phone'], $phones) !== false || array_search($contact['email'], $emails) !== false) { 
    unset($data[$key]); 
    } else { 
    $phones[] = $contact['phone']; 
    $emails[] = $contact['email']; 
    } 
} 

var_dump($data); 

und in Folge erhalten Sie:

array(3) { 
    [0] => 
    array(3) { 
    'name' => 
    string(6) "name 1" 
    'phone' => 
    string(8) "12341234" 
    'email' => 
    string(12) "[email protected]" 
    } 
    [2] => 
    array(3) { 
    'name' => 
    string(6) "name 3" 
    'phone' => 
    string(7) "4322342" 
    'email' => 
    string(13) "[email protected]" 
    } 
    [4] => 
    array(3) { 
    'name' => 
    string(6) "name 5" 
    'phone' => 
    string(11) "12341266634" 
    'email' => 
    string(18) "[email protected]" 
    } 
} 

dies nur Beispiel.

0

Sie können es auf diese Weise tun (i generieren Code von Kopf, so dass es Fehler haben kann - aber Idee sollte klar sein) (Ich gehe davon aus Sie Array Name Personen $):

$emails = []; 
$mobiles = []; 

$discard = false; 
foreach($persons as $person) 
{ 
    $email = $person['customer_email']; 

    if(!isset($emails[$email])) { 
     $emails[$email] = $person; 
    } else { 
     $emails[$email]['redundant_email']=true; 
     $person['redundant_email']=true; 
     $discard = true; 
    } 

    $mobile = $person['customer_mobile']; 

    if(!isset($mobiles[$mobile])) { 
     $mobiles[$mobile] = $person; 
    } else { 
     $mobiles[$mobile]['redundant_mobile']=true; 
     $person['redundant_mobile']=true; 
     $discard = true; 
    } 
} 

Als Ergebnis hat jede Person mit einem Handy oder einer E-Mail-Adresse das Feld redundant_email oder redundant_mobile auf true gesetzt. Die Variable $discard=true sagt, dass Array redundant ist.

+0

Es gibt keinen Wert im Array ..! –

+0

wenn 1 Kontaktnummer zweimal oder öfter als auch E-Mail wiederholt wird. Das ganze Array wird verworfen .. Wie kann ich das erreichen? –

+0

@DevendraSingh - wieder mache ich Korrektur aufgrund Ihrer neuen Anforderungen - jetzt haben Sie Boolesche Antwort in '$ discard' Variable sowie 'Flags' in redundanten Personen –

0

Da brauchen Sie nicht die, wissen aber nur wenn, könnten Sie array_column + array_unique verwenden: (run)

$cm = array_column($arr, 'customer_mobile'); 
if($cm != array_unique($cm)){ 
    echo 'There are duplicates in customer_mobile'; 
} 

$ce = array_column($arr, 'customer_email'); 
if($cm != array_unique($ce)){ 
    echo 'There are duplicates in customer_email'; 
} 

Wenn Sie Spiel müssen beide E-Mail und Handy, tun Sie es in der gleichen if:

if($cm != array_unique($cm) && $ce != array_unique($ce)){ 
    echo 'There are duplicates in both customer_mobile and customer_email'; 
} 
0

Versuchen Sie dies mit foreach. Sie müssen das Array nur einmal durchlaufen, die E-Mail-Adresse und die Mobilnummer als eindeutigen Schlüssel verwenden, die Elemente mit demselben eindeutigen Schlüssel behalten nur die letzte. Wenn Sie möchten, dass die Ergebnisse Zahlenindex verwenden, verwenden Sie array_values() auf der $result.

$result = []; 
foreach($array as $v) 
{ 
    $result[$v['customer_email'] . $v['customer_mobile']] = $v; 
} 
0

Meine Antwort wäre, dass Sie dies in PHP überhaupt nicht tun sollten. In Ihrem Fall sollten die Daten nur auf der Datenbankseite überprüft/validiert/gefiltert werden. Wenn es Duplikate gibt, müssen Sie überhaupt keine Daten abrufen!

Führen Sie eine Abfrage aus, um nur nach Redundanzen in db zu suchen. Nur wenn keine Redundanz die Daten holt.

Wenn sehr viele Daten vorhanden sind, sparen Sie große Datenmengen und durchlaufen Daten von Anfang an.

Viel Glück.

Verwandte Themen