2
votes

Comment comparer deux tableaux avec plusieurs éléments pour trouver différents

J'ai deux tableaux de taille différente mais avec le même nom d'élément. et je veux comparer ces deux tableaux pour trouver un élément différent.

'name'=>'Kelly','sex'=>'female','grade'=>'10'

Je veux trouver l'élément différent entre ces deux tableaux et imprimer le résultat.

je veux une sortie comme ça

$arr_1=array(array('name'=>'john','sex'=>'male','grade'=>'9'),array('name'=>'Smith','sex'=>'male','grade'=>'11'));
$arr_2=array(array('name'=>'john','sex'=>'male','grade'=>'9'),array('name'=>'Smith','sex'=>'male','grade'=>'11'),array('name'=>'Kelly','sex'=>'female','grade'=>'10'));


2 commentaires

Quel est le résultat attendu?


@ vivek_23 je viens de mettre à jour ma question que je veux montrer comme ça


3 Réponses :


3
votes

Vous pouvez utiliser la fonction php array_diff () .

Comme vous avez nasté un tableau, vous pouvez utiliser comme ceci .


3 commentaires

Conversion de tableau à chaîne


Attendez que vous ayez besoin de votre sortie comme un tableau ou une chaîne?


je veux une sortie sous forme de tableau



2
votes

Utilisez array_udiff au lieu de array_diff , vérifiez les démo

$arr_1=array(array('name'=>'john','sex'=>'male','grade'=>'9'),array('name'=>'Smith','sex'=>'male','grade'=>'11'));
$arr_2=array(array('name'=>'john','sex'=>'male','grade'=>'9'),array('name'=>'Smith','sex'=>'male','grade'=>'11'),array('name'=>'Kelly','sex'=>'female','grade'=>'10'));
function udiff($a, $b)
{
    return ($name_diff = strcmp($a["name"],$b["name"])) ? $name_diff : (($sex_diff = strcmp($a["sex"],$b["sex"])) ? $sex_diff : (strcmp($a["grade"],$b["grade"])));
}

$arrdiff = array_udiff($arr_2, $arr_1, 'udiff');
print_r($arrdiff);


0 commentaires

1
votes

Une autre façon de le faire en utilisant array_diff et array_map .

<?php

$arr_1=array(array('name'=>'john','sex'=>'male','grade'=>'9'),array('name'=>'Smith','sex'=>'male','grade'=>'11'));
$arr_2=array(array('name'=>'john','sex'=>'male','grade'=>'9'),array('name'=>'Smith','sex'=>'male','grade'=>'11'),array('name'=>'Kelly','sex'=>'female','grade'=>'10'));

$c1 = array_map("customImplode",$arr_1);
$c2 = array_map("customImplode",$arr_2);

function customImplode($data){
    return implode("|",$data);
}

function customExplode($data){
    return explode("|",$data);
}

$result = array_map("customExplode",array_unique(array_merge(array_diff($c1,$c2),array_diff($c2,$c1))));

echo "<pre>";
print_r($result);

Démo: https://3v4l.org/ULtdp

Notez que la comparaison ici est sensible à la casse.


0 commentaires