J'ai ce problème avec des tableaux multidimensionnels.
Compte tenu de la matrice multidimensionnelle suivante: p> Je veux vérifier ses valeurs et trouver des doublons 0, 2 et 3) ne laissant qu'une seule touche - paire de valeurs supprime les autres, entraînant quelque chose comme celui-ci: p> Comment puis-je faire cela ?? p> p> P>
6 Réponses :
Vous pouvez simplement le faire en utilisant in_array () qui vous obtiendra quelque chose comme p>
Cela supprimera les éléments en double de votre tableau à l'aide de array_unique () code>
:
$new_arr = array_unique($arr, SORT_REGULAR);
-1 Regardez les docs. Cela convertira les valeurs de la matrice en cordes avant de comparer.
@Artefacto: Regardez les documents. J'utilise le drapeau sort_regulaire code> qui n'utilise pas la comparaison de chaînes.
Selon le document PHP "Notez que Array_unique () n'est pas destiné à travailler sur des tableaux multidimensionnels.". On peut voir à partir du lien donné.
@Tim ah désolé. Au moins, mon objection n'est pas valide. Renversé.
@enam je pense que cela signifie simplement que array_unique code> n'aplatit pas le tableau pour trouver les uniques. (BTW, +1)
Pensée Array_unique ne fonctionne pas avec des tableaux multidimensionnels.
@ARTEFACTO Merci pour la clarification ... :) Je ne pense jamais que cette fonction de cette façon!
Downvote parce que l'op indique spécifiquement une matrice multidimensionnelle
$arr = ...; $final = array(); sort($arr); foreach ($arr as $el) { if (!isset($prev) || $el !== $prev) $final[] = $el $prev = $el; } This is a more efficient1 solution (log n + n instead of quadratic) but it relies on a total order between all the elements of the array, which you may not have (e.g. if the inner arrays have objects).1 More efficient than using in_array. Turns out array_unique actually uses this algorithm, so it has the same shortcomings.
Vous pouvez aller intelligent avec la sérialisation de la comparaison des tableaux.
var_dump(makeUnique($data)); function makeUnique(array $data) { $serialized = array_map(create_function('$a', 'return serialize($a);'), $data); $unique = array_unique($serialized); return array_intersect_key($unique, $data); }
Pour vérifier à l'aide d'Array_Unique sur des tableaux multidimensionnels, vous devez l'aplatiser comme si, à l'aide de l'implication.
$c=count($array) for($i=0;$i<$c;$i++) { $flattened=implode("~",$array[$i]); $newarray[$i]=$flattened; } if(count(array_unique($newarray) <count($newarray)) { //returns true if $array contains duplicates //can also use array_unique on $newarray //to remove duplicates, then explode, //to return to default state }
Pourriez-vous corriger l'erreur de codage 〓 code>?
**This is example array** $multi_com=[ [ { "combination_id": "19" }, { "combination_id": "20" }, { "combination_id": "21" } ], [ { "combination_id": "18" }, { "combination_id": "20" }, { "combination_id": "22" } ], [ { "combination_id": "20" }, { "combination_id": "21" } ] ] **This is sample code** $array1 = []; $array2 = []; $status = false; foreach ($multi_com as $key => $val) { foreach ($val as $key2 => $val2) { if (count($array1) !== 0) { $array_res = in_array($val2->combination_id, $array1); if ($array_res) { $array2[] = $val2->combination_id; } } } if (!$status) { for ($x = 0; $x < count($val); $x++) { $array1[] = $val[$x]->combination_id; } } else { $array1 = []; $array1 = $array2; $array2 = []; } $status = true; } return $array1;
Retour $ Array1 = [20]
Essayez http://php.net/manual/fr/function.array-unique .php Cela devrait vous aider.