Удаление повторяющихся элементов из массива

Я использую приведенную ниже строку кода для прокрутки таблицы в моей базе данных:

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

И если я напечатаю массив:

 print_r($items_thread); 

Я получу это:

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

Но я хочу избавиться от повторяющихся элементов массива, поэтому я использую array_unique

 print_r(array_unique($items_thread)); 

Я получаю странный результат, ниже которого не совсем я ищу:

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

В идеале, я думаю, он должен вернуть это:

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

Что мне делать, чтобы все исправить? Я использовал неправильную функцию синтаксиса PHP / по умолчанию?

Solutions Collecting From Web of "Удаление повторяющихся элементов из массива"

Функция array_unique сделает это за вас. Вам просто нужно добавить флаг SORT_REGULAR :

 $items_thread = array_unique($items_thread, SORT_REGULAR); 

Однако, как говорит Брен , вы должны сделать это в SQL, если это возможно.

Вам будет гораздо лучше отфильтровывать дубликаты в SQL-запросе. добавьте ограничение, которое извлекает УНИКАЛЬНЫЙ идентификатор получателя

Чтобы удалить повторяющиеся значения, мы можем использовать функцию array_unique() . Функциональность этого состоит в том, чтобы принять массив и вернуть другой массив без повторяющихся значений.

Общее описание array_unique () приведено ниже:

 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 

Пример 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)); ?> 

Вывод:

 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 ) 

Попробуй это:

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

Выводит следующее:

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

Но я также думаю, что вы должны реализовать это в своей базе данных. Кроме того, проверьте мои другие ответы и решения.

Вы можете использовать этот код, и я надеюсь, что это вам поможет. Он полностью работает:

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

Для этого вы можете использовать регулярные массивы php.

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

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

Это быстрее, плюс сбрасывает индекс ключа массива.

источник : http://php.net/manual/en/function.array-unique.php#89519

Это только для простого массива.

Пожалуйста, проверьте код ниже, я надеюсь, что это поможет вам.

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