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
$ unique = array_keys (array_flip ($ array));
Es más rápido, además de restablecer el índice de clave de matriz.
fuente : http://php.net/manual/en/function.array-unique.php#89519
Esto solo para una matriz simple.
$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
}
}