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.