Я использую приведенную ниже строку кода для прокрутки таблицы в моей базе данных:
$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 / по умолчанию?
Функция 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 } }