Question

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] => info@xx.com
        )

    [1] => Array
        (
            [RecipientID] => 3
            [RecipientScreenname] => Tom L
            [RecipientFirstname] => Thomas
            [RecipientEmail] => info@xx.com
        )

    [2] => Array
        (
            [RecipientID] => 1
            [RecipientScreenname] => Lau T
            [RecipientFirstname] => TK
            [RecipientEmail] => lau@xx.co.uk
        )

)

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

print_r(array_unique($items_thread));

Je reçois le résultat étrange ci-dessous qui n'est pas tout à fait que je cherche:

Array
(
    [0] => Array
        (
            [RecipientID] => 3
            [RecipientScreenname] => Tom L
            [RecipientFirstname] => Thomas
            [RecipientEmail] => info@xx.com
        )

)

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

Array
(
    [0] => Array
        (
            [RecipientID] => 3
            [RecipientScreenname] => Tom L
            [RecipientFirstname] => Thomas
            [RecipientEmail] => info@xx.com
        )

    [1] => Array
        (
            [RecipientID] => 1
            [RecipientScreenname] => Lau T
            [RecipientFirstname] => TK
            [RecipientEmail] => lau@xx.co.uk
        )

)

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

Était-ce utile?

La solution

La 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 suggère que vous devriez le faire dans SQL si possible.

Autres conseils

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

Pour supprimer les valeurs en double, nous pouvons utiliser array_unique() fonction. La fonctionnalité 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
)

Essaye ça:

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

Sorties ce qui suit:

Array
(
    [0] => Array
        (
            [RecipientID] => 3
            [RecipientScreenname] => Tom L
            [RecipientFirstname] => Thomas
            [RecipientEmail] => info@xx.com
        )

    [2] => Array
        (
            [RecipientID] => 1
            [RecipientScreenname] => Lau T
            [RecipientFirstname] => TK
            [RecipientEmail] => lau@xx.co.uk
        )
)

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

Vous pouvez utiliser ce code et j'espère que cela 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); 

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

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

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

C'est plus rapide, plus il réinitialise l'indice de clé du tableau.

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

Ce n'est que pour un simple tableau.

Veuillez vérifier le code ci-dessous, j'espère que c'est une aide 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;

}

$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       
    }
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top