Привет, я с нетерпением жду, найти простое решение, чтобы найти и перечислить двойные значения.
array("Papples", "Gelato", "Gelato", "Banana", "Papples","Papples")
чтобы:
array("Papples", "Gelato", "Gelato2", "Banana", "Papples2","Papples3")
Я мог бы сделать это с помощью цикла if и write во второй процедуре массива, но разве нет лучшего решения для этого?
Спасибо!
ты можешь попробовать
<?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);
?>
Перейти с петлей и 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. Так как ты
имея дело с неопределенными элементами на первом проходе, вы получите уведомления.
Скрипт не сломается, хотя. Конечно, этот оператор должен быть использован
с осторожностью, но в этом случае это действительно помогает упростить код,
делая его менее строгим.
$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