Как получить только повторяющиеся значения из массива

Мне нужна помощь с поиском элементов в массиве, чтобы показать, является ли какой-то элемент дубликатом или больше 2, чтобы показать результат, и я слишком долго искал это, теперь мне нужна помощь от вас, ребята.
это мой массив предметов

Array
(
[0] => Array
(
[1] => 1:30am
[2] => 2:00am
[3] => 3:00am
)

[1] => Array
(
[1] => 2:30am
[2] => 5:00am
[3] => 6:30am
)

[2] => Array
(
[1] => 2:00am
[2] => 3:00am
[3] => 5:00am
)

)

и попробовать это с array_count_values() это возвращение

Предупреждение: array_count_values ​​(): может рассчитывать только STRING и INTEGER
ценности!

и с array_unique , array_diff_assoc() это возвращение

Примечание: преобразование массива в строку

Пожалуйста, помогите, спасибо

0

Решение

Просто ради интереса, здесь всего несколько строк:

$values = array(
array('1:30am', '2:00am', '3:00am'),
array('2:30am', '5:00am', '6:30am'),
array('2:00am', '3:00am', '5:00am')
);

$flatten = array();
array_walk_recursive($values, function ($item) use (&$flatten) {$flatten[]=$item;});
$duplicates = array_keys(array_filter(array_count_values($flatten),function($item){return $item>1;}));

print_r($duplicates);

Конечно, читаемость составляет около нуля.

Основной вывод заключается в том, что вам нужно работать с одномерными массивами, чтобы использовать большинство функций массива PHP. Так что сначала вы должны сгладить свой многомерный массив.

0

Другие решения

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

$unique = array_unique($array, SORT_REGULAR);

SORT_REGULAR гарантирует, что он не будет использовать сравнение строк.

0

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

<?php

$array = array(
array('1:30 am', '2:00 am', '3:00 am'),
array('2:30 am', '5:00 am', '6:30 am'),
array('2:00 am', '3:00 am', '5:00 am')
);

$unique = $dupes = array();
foreach ($array as $subarray) {
foreach ($subarray as $value) {
if (!in_array($value, $unique))
$unique[] = $value;
else
$dupes[] = $value;
}
}

print_r(array_unique($dupes)); // Array ( [0] => 2:00 am [1] => 3:00 am [2] => 5:00 am )
0

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

$arr = [
['1:30am','2:00am','3:00am'],
['2:30am','5:00am','6:30am'],
['2:00am','3:00am','5:00am']
];$countArr = [];

array_walk_recursive($arr, function($time) use (&$countArr) {
if(array_key_exists($time, $countArr))   // If key exists, increment its value
$countArr[$time]++;
else                                     // Otherwise, assign new key
$countArr[$time] = 1;
});

print_r($countArr);

Это печатает:

Array
(
[1:30am] => 1
[2:00am] => 2
[3:00am] => 2
[2:30am] => 1
[5:00am] => 2
[6:30am] => 1
)

Опять же, если вам нужно найти дубликаты в этом,

$duplicates = array_filter($countArr, function($value) {
if($value>1)
return true;
});

print_r($duplicates);

Распечатает:

Array
(
[2:00am] => 2
[3:00am] => 2
[5:00am] => 2
)

Проверить EVAL

0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector