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?
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.
Vous feriez mieux de filtrer les doublons dans la requête SQL. ajouter une contrainte qui récupère un ID de destinataire UNIQUE
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
)
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.
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);
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;
}
$ 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.
$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
}
}
Vous pouvez utiliser les tableaux php réguliers pour y parvenir.
$newArray = array();
foreach ($origArray as $user)
{
$newArray[$user['RecipientID']] = $user;
}