найти и изменить повторяющиеся элементы массива

Игорь Z

Новичок
Умоляю, помогите найти решение:

Есть массив
Array (
[0] => 1
[1] => -5
[2] => -5

[3] => 7
[4] => -9
...)

Нужно все одинаковые элементы массива умножить на -1
и получить
Array (
[0] => 1
[1] => 5
[2] => 5
[3] => 7
[4] => -9
...)

Хоть подскажите что применять нужно. СПАСИБО!
 

Игорь Z

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

Фанат

oncle terrible
Команда форума
для работы с массивами не нужны никакие функции вообще
 

Фанат

oncle terrible
Команда форума
вот я не пойму стремление некоторых "программистов" любой ценой использовать хоть одну, да встроенную функцию.
Вот жизнь им не мила, кусок в горло не лезет, если не похвастается пред другими, что он знает одну конкретную функцию из 100500 для работы с массивами.

при этом написать несчастному ламеру цикл с двумя ифами никто не может.
 

Фанат

oncle terrible
Команда форума
Я тебе ещё пол-дня назад сказал, что любые манипуляции с массивами делаются безо всяких функций, только с использованием циклов.
 

WMix

герр M:)ller
Партнер клуба
PHP:
$d = array_keys( array_filter( array_count_values( $a ), function($v){ return $v > 1;}));
чет я более короткого варианта для первой половины задания так и не придумал...
 

Игорь Z

Новичок
Может кто будет также как и я изучать и искать.
Вот мое решение (может и не совсем легкое), но находит и меняет как мне и нужно:
PHP:
for ($x=0; $x<$napravlenie; $x++) // цикл для определениz встречи и зменения направления 
{
	$value=$array_temp[$x]; //valye=єлемент_поиска
	unset($array_temp[$x]); //удаляем єлемент_поиска
	if(in_array($value, $array_temp)) //и если находим єлемент_поиска то они встретились
		{		$array_LR[$x]=($array_LR[$x])*(-1); // меняю направление *(-1).
		}
	$array_temp=$array_SM; //возвращаем временній массив в исходное состояние
}
 

Фанат

oncle terrible
Команда форума
что-то я не понял, а второе повторное значение тоже меняет?
первое мы нашли, потом удалили из массива.
дошли до второго, а ему пары уже нету - мы ж его удалили?

или я неверно в голове исполнил этот код?
 

Игорь Z

Новичок
что-то я не понял, а второе повторное значение тоже меняет?
меняет оба - оба элемента меняют направление. мы же до второго элемента (который удалён и не изменен) дойдём и изменим при обработке его двойника. мы же обрабатываем временный массив, а изменяем постоянный. Наверное как-то так...
 

Фанат

oncle terrible
Команда форума
не понял всё равно.
ну да ладно, раз говоришь, что работает - верю.
 
Сверху