Замена значений элементов массива и не только

local1

Новичок
Задача в общем - пользователь вводит массив цен. Далее происходит поиск этих цен в массиве всех цен (массив1) и где-то записываются индексы (i) элементов, где было совпадение. Далее выбирается из массива замены (массив 2) значения с этими индексами и записываются в результирующим массив (это самый главный момент, прочитайте еще разочек :) ) Все.

Если итак непонятно, то живой пример: есть массив символов(1) и массив соответствующих значений ASCII (2) (к примеру "!" это "!"). Юзер вводит символы, происходит поиск в массиве 1, соответствие в массиве 2 и запись в массив 4 (результирующий)
 

rotoZOOM

ACM maniac
Мы условие задачи поняли. Перечитай мой предыдущий пост еще раз. Хочется услышать от тебя словесный алгоритм работы.
Давай я начну:
$price_all - все цены
$replace - подмена
$price - то, что ввел пользователь.

Допустим ты перебираешь массив $price_all.
Вот ты остановился на элементе с индексом $i.
Опиши словами, что тебе надо с ним сделать.
 

local1

Новичок
Я сейчас пробую сделать так как порекомендовал craz, а тем временем отвечу на пост выше. Мне не важен алгоритм, то есть не важно как это будет происходить, какие будут использоваться функции и т.п. Можно пользоваться всем чем угодно, мне главное результат. Если условия задачи ясны, то какие у Вас есть варианты ее реализации? :) Я уверен, что там буквально 3-4 строчки кода, вот я никак не могу их написать
 

local1

Новичок
rotoZOOM я Вас не оскорблял, зачем так резко выражаться? Я еще в самом начале написал, что перепробовал все, и в данный момент мне подойдет любой предложенный здесь вариант, так как самому написать не получается.
 

Adelf

Administrator
Команда форума
rotoZOOM
знатно помучал :)

Задача не получается, потому что ты работаешь со строками. "15" преобразовывается так - заменяется 1, а потом 5.
Тут действительно необходимо самому сделать тоже самое что и в str_replace, но проверять строки на ПОЛНОЕ равенство(да и вообще лучше к числам перейти).
 

local1

Новичок
Спасибо craz за in_array и Adelf за подсказку с переводом в числа. Могу выложить, что получилось, но сомневаюсь, что по поиску кто-то найдет эту тему и то, что ему необходимо :) Но тем не менее:

PHP:
$price_all = array(1, 2, 3, 4, 5, 7, 10, 12, 15);
$replace = array(100, 200, 300, 400, 500, 700, 700, 700, 800);
$price = array(1, 3, 5, 10, 15);
$result = array();

$count = count($price_all);    
    
for ($i = 0; $i < $count; ++$i) {
       if (in_array ( $price[$i], $price_all )) {
				$index = array_search($price[$i], $price_all);
					$result[] = $replace[$index];
}  
}
P.S. Ну а некоторые личности пусть и дальше строят из себя очень важных, вместо того, чтоб помочь.
 

tiger-nick

Новичок
Если правильно понял задание, то будет примерно так:
PHP:
$arr1=array("1", "2", "3", "4", "5", "7", "10", "12", "15");
$arr2=array("100", "200", "300", "400", "500", "700", "700", "700", "800");
$arr3=array("1", "3", "5", "10", "15");
$arr4=array();

// пробегаемся в цикле по массиву $arr1
foreach($arr1 as $value){
    // проверяем на наличие значения из $arr1 в массиве $arr3
    if(in_array($value, $arr3)){
       // получаем массив ключей массива $arr3, с совпадением значения из $arr1
       $tmp = array_keys($arr3, $value);
       // если значение с таким ключем ($tmp[0]) существует в массиве $arr2, то записываем его в массив $arr4
       if(isset($arr2[$tmp[0]])) $arr4[]=$arr2[$tmp[0]];
    }
}
 

local1

Новичок
tiger-nick спасибо за вариант, хоть с опозданием, но респект за помощь :)
 

tiger-nick

Новичок
Прикол в том, что результаты то раные! :)
Мой:
Array
(
[0] => 100
[1] => 200
[2] => 300
[3] => 400
[4] => 500
)

Твой:
Array
(
[0] => 100
[1] => 300
[2] => 500
[3] => 700
[4] => 800
)
 

craz

Нестандартное звание
ага потому что кому то делать нехрен видимо
 

local1

Новичок
tiger-nick я не пробовал твой вариант в действии, так как уже сделал то, что мне нужно было :) Прекращай тратить на меня свое время и еще раз спасибо, что заинтересовался темой :)
 
Сверху