2011-07-20 3 views
0

Nous aimerions savoir, comment pouvons-nous utiliser array_diff() dans deux tableaux. S'il vous plaît regardez ci-dessous.PHP Array Merge et diffrence selon les valeurs

 

    $duplicates= Array ([0] => Array ([url] => http://www.cheapohotels.co.uk/resources /index_car_hire.html [ip] => 77.92.74.100 [status] => Duplicate) [1] => Array ([url] => http://www.villasinprovence.co.uk/resources/index_car_hire.html [ip] => 77.92.74.100 [status] => Duplicate) [2] => Array ([url] => http://www.mobiz.co.uk/resources/index_recreation_autos.html [ip] => 77.92.74.100 [status] => Duplicate) [3] => Array ([url] => http://www.holidaysoffersuk.co.uk/resources/index_car_hire.html [ip] => 77.92.74.100 [status] => Duplicate) [4] => Array ([url] => http://www.ticketsforsaleuk.co.uk/resources/index_companies_automotive.html [ip] => 77.92.74.100 [status] => Duplicate) [5] => Array ([url] => http://www.holidayparkfinder.co.uk/resources/index_car_hire.html [ip] => 213.171.218.208 [status] => Duplicate) [6] => Array ([url] => http://www.themeparkhotels.co.uk/resources/index_car_hire.html [ip] => 213.171.218.10 [status] => Duplicate)) 

    $Total_val = Array ([0] => Array ([url] => http://www.cheapohotels.co.uk/resources/index_car_hire.html [ip] => 77.92.74.100 [status] => Unique) [1] => Array ([url] => http://www.holidayparkfinder.co.uk/resources/index_car_hire.html [ip] => 213.171.218.208 [status] => Unique) [2] => Array ([url] => http://www.themeparkhotels.co.uk/resources/index_car_hire.html [ip] => 213.171.218.10 [status] => Unique) [3] => Array ([url] => http://www.villasinprovence.co.uk/resources/index_car_hire.html [ip] => 77.92.74.100 [status] => Unique) [4] => Array ([url] => http://usedmotorcycleaccessories.com/resources/ [ip] => 174.37.15.56 [status] => Unique) [5] => Array ([url] => http://aftermarket-motorcycleparts.com/resources/ [ip] => 50.23.134.232 [status] => Unique) [6] => Array ([url] => http://cheaponlinemotorcycleparts.com/resources/ [ip] => 173.192.128.240 [status] => Unique) [7] => Array ([url] => http://usedcaronlinereviews.com/resources/ [ip] => 50.23.153.112 [status] => Unique) [8] => Array ([url] => http://cartransportationreviews.com/resources/ [ip] => 50.23.132.48 [status] => Unique) [9] => Array ([url] => http://vehicleaccidentinsurancequotes.com/ [ip] => 65.75.176.111 [status] => Unique) [10] => Array ([url] => http://www.netbizcorp.com/linkmachine/resources/resources_recreation_autos.html [ip] => 74.209.213.8 [status] => Unique) [11] => Array ([url] => http://www.mobiz.co.uk/resources/index_recreation_autos.html [ip] => 77.92.74.100 [status] => Unique) [12] => Array ([url] => http://www.holidaysoffersuk.co.uk/resources/index_car_hire.html [ip] => 77.92.74.100 [status] => Unique) [13] => Array ([url] => http://www.ticketsforsaleuk.co.uk/resources/index_companies_automotive.html [ip] => 77.92.74.100 [status] => Unique)) 
echo <pre>'; print_r($duplicates); echo '</pre>'; 

Dans les tableaux ci-dessus, ayant des valeurs en double (et uniques). par défaut du programme $ Total_val stocké et mentionné le statut unique dans les valeurs. mais ces tableaux n'ont pas les valeurs uniques, pour obtenir les valeurs uniques, nous devons soustraire de $ duplicates. Et nous faisons la même chose en PHP, nous n'obtenons pas les valeurs exactes ... soustrayant par IP pas pour d'autres valeurs. La raison principale derrière cela. nous devons faire un nouveau tableau avec les IP uniques comme =

 

    $new_array = array_diff($Total_val, $duplicates); 
    //the output for this function is 
     Array () ; // showing Blank Result. 
    $new_array = array_diff_assoc($array1, $dup); 
    //echo result, then the output is 

    Array ([7] => Array ([url] => http://usedcaronlinereviews.com/resources/ [ip] => 50.23.153.112 [status] => Unique) [8] => Array ([url] => http://cartransportationreviews.com/resources/ [ip] => 50.23.132.48 [status] => Unique) [9] => Array ([url] => http://vehicleaccidentinsurancequotes.com/ [ip] => 65.75.176.111 [status] => Unique) [10] => Array ([url] => http://www.netbizcorp.com/linkmachine/resources/resources_recreation_autos.html [ip] => 74.209.213.8 [status] => Unique) [11] => Array ([url] => http://www.mobiz.co.uk/resources/index_recreation_autos.html [ip] => 77.92.74.100 [status] => Unique) [12] => Array ([url] => http://www.holidaysoffersuk.co.uk/resources/index_car_hire.html [ip] => 77.92.74.100 [status] => Unique) [13] => Array ([url] => http://www.ticketsforsaleuk.co.uk/resources/index_companies_automotive.html [ip] => 77.92.74.100 [status] => Unique)) 

Vous pouvez vérifier la sortie finale de cette fonction « array_diff_assoc() », son travail. mais il ne montre pas la valeur exacte. comme vous pouvez voir l'adresse IP 77.92.74.100. son répété trois fois et toujours son statut unique.

Array ([0] => Array ([url] => http://www.cheapohotels.co.uk/resources/index_car_hire.html [ip] => 77.92.74.100 [status] => Unique) [1] => Array ([url] => http://www.holidayparkfinder.co.uk/resources/index_car_hire.html [ip] => 213.171.218.208 [status] => Unique) [2] => Array ([url] => http://www.themeparkhotels.co.uk/resources/index_car_hire.html [ip] => 213.171.218.10 [status] => Unique) [3] => Array ([url] => http://www.villasinprovence.co.uk/resources/index_car_hire.html [ip] => 77.92.74.100 [status] => Unique) [4] => Array ([url] => http://usedmotorcycleaccessories.com/resources/ [ip] => 174.37.15.56 [status] => Unique) [5] => Array ([url] => http://aftermarket-motorcycleparts.com/resources/ [ip] => 50.23.134.232 [status] => Unique) [6] => Array ([url] => http://cheaponlinemotorcycleparts.com/resources/ [ip] => 173.192.128.240 [status] => Unique) [7] => Array ([url] => http://usedcaronlinereviews.com/resources/ [ip] => 50.23.153.112 [status] => Unique) [8] => Array ([url] => http://cartransportationreviews.com/resources/ [ip] => 50.23.132.48 [status] => Unique) [9] => Array ([url] => http://vehicleaccidentinsurancequotes.com/ [ip] => 65.75.176.111 [status] => Unique) [10] => Array ([url] => http://www.netbizcorp.com/linkmachine/resources/resources_recreation_autos.html [ip] => 74.209.213.8 [status] => Unique) [11] => Array ([url] => http://www.mobiz.co.uk/resources/index_recreation_autos.html [ip] => 77.92.74.100 [status] => Unique) [12] => Array ([url] => http://www.holidaysoffersuk.co.uk/resources/index_car_hire.html [ip] => 77.92.74.100 [status] => Unique) [13] => Array ([url] => http://www.ticketsforsaleuk.co.uk/resources/index_companies_automotive.html [ip] => 77.92.74.100 [status] => Unique)) 

me donner quand je l'ai essayé cette fonction

function cmp($a, $b) { 
return strcmp($a['status'], $b['status']); 
} 
$diff = array_udiff($array1, $dup, 'cmp'); 

RESTENT même « unique à toutes les valeurs », je veux juste parler en conséquence. comme si l'IP dupliquée est disponible alors le statut sera Dupliquer. même que pour Unique.

S'il vous plaît donnez-moi la suggestion pour ce programme.

Merci

ROD

+0

tableau d'impression comme ceci 'echo «

'; print_r($array); echo '
»;' et de la structure du tableau réafficher pour le rendre lisible –

+0

S'il vous plaît vérifier à nouveau – PPS

+0

Nope, afficher la sortie du code ci-dessus affiché sur mon premier commentaire –

Répondre

1

Le problème est de savoir comment array_diff détermine l'égalité de deux valeurs:

Remarque: Deux éléments sont considérés comme égaux si et seulement si (string) $elem1 === (string) $elem2. En mots: lorsque la représentation de la chaîne est la même.

Le problème ici est que converting arrays to string cède toujours "Array":

Les tableaux sont toujours convertis en la chaîne "Array"; [...]

Ainsi, chaque valeur de tableau de votre premier tableau est considérée comme un doublon de toute autre valeur de tableau de l'autre tableau. Et comme array_diff ne retourne pas le symmetric difference mais A \ B (à savoir A moins B) et A a plus d'éléments que B, vous êtes juste $Total_val sans les sept premiers articles de retour. Pour obtenir les bons résultats, vous devez utiliser une autre fonction de comparaison que la comparaison des représentations sous forme de chaîne de chaque élément comme suit: array_diff.Vous pouvez utiliser le array_udiff pour le faire:

function cmpByIp($a, $b) { 
    return strcmp($a['ip'], $b['ip']); 
} 
$diff = array_udiff($Total_val, $duplicates, 'cmpByIp'); 

Ce compare vos éléments de tableau juste par ip.

+0

S'il vous plaît regarder la question ci-dessus, nous avons mis à jour le résultat avec vos valeurs. – PPS