Мне нужна помощь с поиском элементов в массиве, чтобы показать, является ли какой-то элемент дубликатом или больше 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()
это возвращение
Примечание: преобразование массива в строку
Пожалуйста, помогите, спасибо
Просто ради интереса, здесь всего несколько строк:
$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. Так что сначала вы должны сгладить свой многомерный массив.
Попробуй это:
$unique = array_unique($array, SORT_REGULAR);
SORT_REGULAR гарантирует, что он не будет использовать сравнение строк.
Вы должны зациклить в своем массиве, а затем снова зациклить в своих подмассивах. Оттуда вы можете создать массив с уникальными значениями и массив с дубликатами:
<?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 )
Таким образом, чтобы получить счетчик каждого времени, вы можете создать временный массив и сделать каждую строку времени ключом этого массива, а затем увеличить его счетчик следующим образом:
$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