web-dev-qa-db-fra.com

Supprimer les éléments en double d'un tableau

J'utilise la ligne de code ci-dessous pour parcourir une table dans ma base de données:

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

Et si j'imprime le tableau:

print_r($items_thread);

J'obtiendrai ceci:

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]
        )

)

Mais je veux me débarrasser des éléments en double dans le tableau, donc j'utilise array_unique

print_r(array_unique($items_thread));

J'obtiens le résultat bizarre ci-dessous qui n'est pas tout à fait ce que je recherche:

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

)

Idéalement, je pense que cela devrait retourner ceci:

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]
        )

)

Que dois-je faire pour bien faire les choses? Ai-je utilisé la mauvaise syntaxe PHP/fonction par défaut?

25
laukok

Le array_unique la fonction le fera pour vous. Vous aviez juste besoin d'ajouter le SORT_REGULAR drapeau:

$items_thread = array_unique($items_thread, SORT_REGULAR);

Cependant, comme bren le suggère, vous devriez le faire en SQL si possible.

66
Tim Cooper

Vous feriez mieux de filtrer les doublons dans la requête SQL. ajouter une contrainte qui récupère un ID de destinataire UNIQUE

6
bren

Pour supprimer les valeurs en double, nous pouvons utiliser la fonction array_unique(). La fonctionnalité de celui-ci est d'accepter un tableau et renvoie un autre tableau sans valeurs en double.

La description générale de array_unique () est donnée ci-dessous:

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 

Exemple 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));
?>

Production:

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
)
4
user1487634

Essaye ça:

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

Génère les éléments suivants:

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]
        )
)

Mais je pense aussi que vous devriez implémenter cela dans votre base de données. Aussi, vérifiez mon autre réponse et solutions.

1
Alix Axel

Vous pouvez utiliser ce code et j'espère qu'il vous aidera. Cela fonctionne complètement:

$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); 
1
Rajat Singh

Veuillez vérifier le code ci-dessous, j'espère que cette aide est complète pour vous.

$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;

}

0
Raju Dudhrejiya

$ unique = array_keys (array_flip ($ array));

C'est plus rapide, et il réinitialise l'index des clés du tableau.

source : http://php.net/manual/en/function.array-unique.php#89519

Ceci uniquement pour un tableau simple.

0
H Aßdøµ
$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       
    }
}
0
suresh kumawat

Vous pouvez utiliser les tableaux php réguliers pour y parvenir.

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