PHP находит двойные значения в массиве и перечисляет их

Привет, я с нетерпением жду, найти простое решение, чтобы найти и перечислить двойные значения.

array("Papples", "Gelato", "Gelato", "Banana", "Papples","Papples")

чтобы:

array("Papples", "Gelato", "Gelato2", "Banana", "Papples2","Papples3")

Я мог бы сделать это с помощью цикла if и write во второй процедуре массива, но разве нет лучшего решения для этого?

Спасибо!

1

Решение

ты можешь попробовать

<?php
$arr = array("Papples", "Gelato", "Gelato", "Banana", "Papples","Papples");

$countarray = array_count_values($arr);

$resultarray = array();
foreach ($countarray as $key=>$value) {
for ($i = 1; $i <= $value; $i++) {
$resultarray[]=$key.$i;
}
}

print_r($resultarray);

?>
1

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

Перейти с петлей и if, это не сложно и будет довольно быстро.

$delicatessen = [
"Papples", "Gelato", "Gelato", "Banana", "Papples","Papples"];

foreach ($delicatessen as $e) {
if (@$counter[$e]++) $e .= $counter[$e];
$new[] = $e;
}

По сути, это всегда добавляет элемент в новый массив,
ясно, но изменяя это или нет. Условие $counter массив
который будет хранить количество раз, когда элемент появляется. Все создано «на
муха «, PHP позволяет это.

Когда мы получаем $counter[$e] этот элемент еще не существует, поэтому
возвращаемое значение делает условие не выполненным. Однако есть побочный эффект
что после того, как undef возвращается, он будет увеличен (с ++) так
сейчас $counter[$e] будет 1,

Если на будущей итерации к нему снова будет получен доступ, возвращаемое значение
1 выполнит условие с побочным эффектом в точке
if заявление выполнено $counter[$e] уже будет 2,
оператор конкатенирует этот номер до конца элемента.

Таким образом, в первый раз ничего не объединяется, но есть
побочный эффект. На следующих итерациях число соединяется с
элемент.

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

1

$arr = array("Papples", "Gelato", "Gelato", "Banana", "Papples","Papples");
$arr_count = array_count_values($arr);
$new_arr = array();
foreach($arr_count as $key=>$val){
if($val > 1){
$k = 1;
for($i=0; $i<$val; $i++){
if($i==0){
$new_arr[] = $key;
}else{
$new_arr[] = $key.++$k;
}
}
}else{
$new_arr[] = $key;
}
}
echo "<pre>"; print_r($new_arr);

Тестовый скрипт: https://3v4l.org/iGf1s

0
По вопросам рекламы [email protected]