Как удалить повторяющиеся значения из массива в PHP?
Как удалить повторяющиеся значения из массива в PHP
Ответы (21)
Используйте array_unique().
Пример:
$array = array(1, 2, 2, 3);
$array = array_unique($array); // Array is now (1, 2, 3)
Note that array_unique() is not intended to work on multi dimensional arrays.
- person Peter Ajtai; 19.08.2010
$array = array_unique($array, SORT_REGULAR);
- person iniravpatel; 12.01.2017
Используйте 1_
array_unique
: для уникального массива array_values
: для переиндексации
array_unique
возвращает объект с парами ключ-значение И array_values
возвращает только значения в виде массива.
- person narainsagar; 21.09.2018
Единственное, что сработало для меня, это:
$array = array_unique($array, SORT_REGULAR);
Изменить: SORT_REGULAR
сохраняет тот же порядок исходного массива.
иногда array_unique()
не подходит, если вы хотите получить уникальные И повторяющиеся элементы...
$unique=array("","A1","","A2","","A1","");
$duplicated=array();
foreach($unique as $k=>$v) {
if( ($kt=array_search($v,$unique))!==false and $k!=$kt )
{ unset($unique[$kt]); $duplicated[]=$v; }
}
sort($unique); // optional
sort($duplicated); // optional
результаты на
array ( 0 => '', 1 => 'A1', 2 => 'A2', ) /* $unique */
array ( 0 => '', 1 => '', 2 => '', 3 => 'A1', ) /* $duplicated */
Мы можем создать такой тип массива, чтобы использовать это последнее значение, которое будет обновлено до значения столбца или ключа, и мы получим уникальное значение из массива...
$array = array (1,3,4,2,1,7,4,9,7,5,9);
$data=array();
foreach($array as $value ){
$data[$value]= $value;
}
array_keys($data);
OR
array_values($data);
explode(",", implode(",", array_unique(explode(",", $YOUR_ARRAY))));
Это позаботится о сопоставлении ключей и сериализует ключи для полученного нового массива :-)
explode("," $YOUR_ARRAY)
, когда $YOUR_ARRAY
будет array("1", "2", "3")
?
- person apaderno; 18.08.2010
В зависимости от размера вашего массива я нашел
$array = array_values( array_flip( array_flip( $array ) ) );
может быть быстрее, чем array_unique.
Это отличный способ сделать это. Возможно, вы захотите убедиться, что его вывод снова возвращается в виде массива. Теперь вы показываете только последнее уникальное значение.
Попробуй это:
$arrDuplicate = array ("","",1,3,"",5);
foreach (array_unique($arrDuplicate) as $v){
if($v != "") { $arrRemoved[] = $v; }
}
print_r ($arrRemoved);
if (@!in_array($classified->category,$arr)){
$arr[] = $classified->category;
?>
<?php } endwhile; wp_reset_query(); ?>
первый раз проверьте значение в массиве и найдите такое же значение, игнорируйте его
Удалите повторяющиеся значения из ассоциативного массива в PHP.
$arrDup = Array ('0' => 'aaa-aaa' , 'SKU' => 'aaa-aaa' , '1' => '12/1/1' , 'date' => '12/1/1' , '2' => '1.15' , 'cost' => '1.15' );
foreach($arrDup as $k => $v){
if(!( isset ($hold[$v])))
$hold[$v]=1;
else
unset($arrDup[$k]);
}
Массив ( [0] => ааа-ааа [1] => 12/1/1 [2] => 1,15)
Это может быть несколько способов сделать это, а именно:
//first method
$filter = array_map("unserialize", array_unique(array_map("serialize", $arr)));
//second method
$array = array_unique($arr, SORT_REGULAR);
Если вы заботитесь о производительности и имеете простой массив, используйте:
array_keys(array_flip($array));
Это во много раз быстрее, чем array_unique.
попробуйте этот короткий и приятный код -
$array = array (1,4,2,1,7,4,9,7,5,9);
$unique = array();
foreach($array as $v){
isset($k[$v]) || ($k[$v]=1) && $unique[] = $v;
}
var_dump($unique);
Вывод —
array(6) {
[0]=>
int(1)
[1]=>
int(4)
[2]=>
int(2)
[3]=>
int(7)
[4]=>
int(9)
[5]=>
int(5)
}
if
.
- person Mark Amery; 27.08.2015
Здесь я создал второй пустой массив и использовал цикл for
с первым массивом, который имеет дубликаты. Он будет работать столько раз, сколько будет считать первый массив. Затем сравнивается с позицией массива с первым массивом и сопоставляется, есть ли в нем этот элемент уже или нет, с помощью in_array
. Если нет, то он добавит этот элемент во второй массив с помощью array_push
.
$a = array(1,2,3,1,3,4,5);
$count = count($a);
$b = [];
for($i=0; $i<$count; $i++){
if(!in_array($a[$i], $b)){
array_push($b, $a[$i]);
}
}
print_r ($b);
foreach
?
- person Nico Haase; 04.12.2018
foreach
, потому что мне очень удобно использовать цикл for. Вот и все.
- person Aladin Banwal; 05.12.2018
Это можно сделать с помощью функции, которую я сделал, три дубликата функций возвращают значения, которые дублируются в массиве.
Вторая функция single возвращает только те значения, которые являются одиночными, что означает, что они не повторяются в массиве, а третья и полная функция возвращает все значения, но не дублируются, если какое-либо значение дублируется, оно преобразует его в одиночное;
function duplicate($arr) {
$duplicate;
$count = array_count_values($arr);
foreach($arr as $key => $value) {
if ($count[$value] > 1) {
$duplicate[$value] = $value;
}
}
return $duplicate;
}
function single($arr) {
$single;
$count = array_count_values($arr);
foreach($arr as $key => $value) {
if ($count[$value] == 1) {
$single[$value] = $value;
}
}
return $single;
}
function full($arr, $arry) {
$full = $arr + $arry;
sort($full);
return $full;
}
Мы можем легко использовать arrar_unique($array);
для удаления повторяющихся элементов Но проблема в этом методе заключается в том, что индексы элементов не в порядке, что вызовет проблемы, если они будут использованы где-то еще позже.
Использовать
$arr = array_unique($arr);
$arr = array_values($arr);
print_r($arr);
Или
$arr = array_flip($arr);
$arr = array_flip($arr);
$arr = array_values($arr);
print_r($arr);
Первый флип переворачивает пару значений ключа, таким образом, объединяя элементы с похожим ключом (изначально это было значение).
2-й флип, чтобы вернуть все пары ключ-значение. Наконец, array_value()
устанавливает каждое значение с ключом, начинающимся с 0.
Примечание. Не использовать в ассоциативном массиве с предопределенными парами "ключ-значение"
Я сделал это без использования какой-либо функции.
$arr = array("1", "2", "3", "4", "5", "4", "2", "1");
$len = count($arr);
for ($i = 0; $i < $len; $i++) {
$temp = $arr[$i];
$j = $i;
for ($k = 0; $k < $len; $k++) {
if ($k != $j) {
if ($temp == $arr[$k]) {
echo $temp."<br>";
$arr[$k]=" ";
}
}
}
}
for ($i = 0; $i < $len; $i++) {
echo $arr[$i] . " <br><br>";
}
$array = array("a" => "moon", "star", "b" => "moon", "star", "sky");
// Deleting the duplicate items
$result = array_unique($array);
print_r($result);
ссылка: Демо