values valores unicos repeated remove objects multidim eliminar elementos duplicados bidimensional array php arrays duplicates array-unique

php - valores - Eliminar elementos duplicados de una matriz



unique multidim array php (9)

Uso la siguiente línea de código para recorrer una tabla en mi base de datos:

$items_thread = $connection -> fetch_all($sql);

Y si imprimo la matriz hacia fuera:

print_r($items_thread);

Conseguiré esto:

Array ( [0] => Array ( [RecipientID] => 3 [RecipientScreenname] => Tom L [RecipientFirstname] => Thomas [RecipientEmail] => [email protected] ) [1] => Array ( [RecipientID] => 3 [RecipientScreenname] => Tom L [RecipientFirstname] => Thomas [RecipientEmail] => [email protected] ) [2] => Array ( [RecipientID] => 1 [RecipientScreenname] => Lau T [RecipientFirstname] => TK [RecipientEmail] => [email protected] ) )

Pero quiero deshacerme de los elementos duplicados en la matriz, así que uso array_unique

print_r(array_unique($items_thread));

Me sale el resultado extraño que no estoy buscando.

Array ( [0] => Array ( [RecipientID] => 3 [RecipientScreenname] => Tom L [RecipientFirstname] => Thomas [RecipientEmail] => [email protected] ) )

Idealmente, creo que debería devolver esto:

Array ( [0] => Array ( [RecipientID] => 3 [RecipientScreenname] => Tom L [RecipientFirstname] => Thomas [RecipientEmail] => [email protected] ) [1] => Array ( [RecipientID] => 1 [RecipientScreenname] => Lau T [RecipientFirstname] => TK [RecipientEmail] => [email protected] ) )

¿Qué debo hacer para hacerlo bien? ¿He usado la sintaxis de PHP / función predeterminada por defecto?


La función array_unique hará esto por ti. Solo necesitas agregar la SORT_REGULAR :

$items_thread = array_unique($items_thread, SORT_REGULAR);

Sin embargo, como sugiere bren , debes hacer esto en SQL si es posible.


Para eliminar valores duplicados podemos usar la función array_unique() . Su funcionalidad es aceptar una matriz y devuelve otra matriz sin valores duplicados.

La descripción general de array_unique () se da a continuación:

General Format = array array_unique(array $array [, int $sort_flags=sort_string] ) Parameters = array: Input array ->sort_flags: The second optional parameter is used to compare items as follows 1. SORT_REGULAR - Normal 2. SORT_NUMERIC - Numerically 3. SORT_STRING - As 4. string SORT_LOCALE_STRING - As string, based on the current locale. Return Value = Another array without duplicate values

Ejemplo 1:

<?php $array=array(''cricket''=>11,''football''=>11,''chess''=>2); echo"<br/><b>Initially the values of /$array is:</b><br/>"; var_dump($array); echo"<br/><b>After removing the duplicates:</b><br/>"; print_r(array_unique($array)); ?>

Salida:

Initially the values of $array is: array(3) { ["cricket"] => int(11) ["football"] => int(11) ["chess"] => int(2) } After removing the duplicates: Array ( [cricket] => 11 [chess] => 2 )


Por favor revise el siguiente código, espero que esta ayuda sea completa para usted

$resultArray = uniqueAssocArray($actualArray, ''RecipientID''); function uniqueAssocArray($array, $uniqueKey) { if (!is_array($array)) { return array(); } $uniqueKeys = array(); foreach ($array as $key => $item) { $groupBy=$item[$uniqueKey]; if (isset( $uniqueKeys[$groupBy])) { //compare $item with $uniqueKeys[$groupBy] and decide if you //want to use the new item $replace= false; } else { $replace=true; } if ($replace) $uniqueKeys[$groupBy] = $item; } return $uniqueKeys;

}


Prueba esto:

$data = array_map(''unserialize'', array_unique(array_map(''serialize'', $data)));

Salidas de lo siguiente:

Array ( [0] => Array ( [RecipientID] => 3 [RecipientScreenname] => Tom L [RecipientFirstname] => Thomas [RecipientEmail] => [email protected] ) [2] => Array ( [RecipientID] => 1 [RecipientScreenname] => Lau T [RecipientFirstname] => TK [RecipientEmail] => [email protected] ) )

Pero también creo que deberías implementar esto en tu base de datos. También, revisa mi otra respuesta y mis soluciones.


Puede utilizar las matrices de php regulares para lograr esto.

$newArray = array(); foreach ($origArray as $user) { $newArray[$user[''RecipientID'']] = $user; }


Puedes usar este código y espero que te ayude. Está funcionando completamente:

$array = array(1,1,2,3,4,4,4,5); $temp=array(); for($i=0; $i<=count($array); $i++) { if($array[$i] != '''') { for($j=$i+1; $j<=count($array); $j++ ) { if($array[$i]==$array[$j]) { $array[$j] = ''''; } else { $temp[$array[$i]]=$array[$i]; } } } } print_r($temp);


Sería mucho mejor filtrar los duplicados en la consulta SQL. agregar una restricción que obtiene un ID de destinatario ÚNICO



$res1 = mysql_query("SELECT * FROM `luggage` where r_bus_no=''".$tour_id."'' and `date1`=''$date'' AND `login_id`=''".$_SESSION[''login_id'']."''"); } /// create a array to store value $city_arr = array(); if(mysql_num_rows($res1)>0) { while($row1 = mysql_fetch_array($res1)) { /// insert the value in array use the array_push function array_push($city_arr,$row1[''r_to'']); } //// remove the duplicate entry in array use the array_unique function $a = array_unique($city_arr); echo "<option value='''' selected=''selected''> -- Select City ---</option>"; foreach($a as $b) { ?> <option value="<?php echo $b ;?>"><?php echo city($b); ?></option> <?php } }