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

local1

Новичок
Добрый день, даже не мог тему назвать правильно, так как тяжело объяснить что мне нужно.

Есть 4 массива:

1) Массив со всеми возможными значениями price:

PHP:
array("1", "2", "3", "4", "5", "7", "10", "12", "15")
2) Массив такого же размера, как и 1, в котором хранятся значения для замены.

PHP:
array("100", "200", "300", "400", "500", "700", "700", "700", "800")
3) Массив значений price, с которым нужно сделать манипуляции:

PHP:
array("1", "3", "5", "10", "15")
4) Результирующий массив

Мне нужно найти в массиве 1 элементы со значениями, которые встречаются в массиве 3, далее записать в массив 4 значения элементов, которые встречались в массиве 1, но с заменой соответствующих значений элементов из массива 2.

Если по простому: поиск совпадений значений в массиве 1, например, нашли мы цифру 1 в массиве 1, далее смотрим на номер элемента в массиве (в данном случае это [0]) Берем значение из массива 2 с номером элемента [0] и записываем в массив 4.

Надеюсь понятно :)
 

local1

Новичок
Пытался так:

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 = str_replace($price_all, $replace, $price);
Но на выходе совсем не то, что нужно. Где-то 2-3 первых значения заменяются нормально, а дальше уже неадекватные цифры аля 1500, 3000 и т.д

Мне кажется это совсем не так нужно делать, думаю нужно через foreach , но никак не могу написать правильно
 

rotoZOOM

ACM maniac
Попробуй вручную сделать несколько шагов, как описано в документации на str_replace.
 

local1

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

rotoZOOM

ACM maniac
А ты сделай вручную. На бумажке. Проговори алгоритм. А потом попробуй реализовать конструкциями PHP.
 

local1

Новичок
rotoZOOM на бумажке то я много чего могу реализовать )) но моих знаний php пока что не хватает для решения такой простой задачи. Сделай намек что ли, только более конкретный чем, читать мануал по функции :)
 

local1

Новичок
Мне казалось, что этот раздел для помощи новичкам, я намного лучше запоминаю материал, когда читаю примеры :)
Я же говорю, что читал, думал, не получилось. Очень надеюсь на помощь, не такую, что мне дали готовый код и я просто скопипастил. На самом деле все немного сложнее у меня, и если бы мне помогли с этим маленьким примером, то я бы сделал конструкцию немного сложнее на его основе.
 

rotoZOOM

ACM maniac
Вот тебе элементарная задачка. Дан массив целых чисел.
Выведи на экран только те, которые больше 100.
PHP:
array (10,20,30,450,55,210,11,-20,567);
Если ты эту задачку не осилишь - это означает, что у тебя нет представления о синтаксисе языка PHP, либо о программировании.
Первое лечится мануалами, второе - сменой профессии.
 

local1

Новичок
Ну вроде так:

PHP:
$test = array (10,20,30,450,55,210,11,-20,567);
$count = count($test) -1;	
	for ($i = 0; $i <= $count; ++$i) {
         if ($test[$i] > 100) echo "$test[$i] \n"
}
 

local1

Новичок
Причем тут эта задачка я конечно без понятия :) И да, я какбэ программист :)
 

rotoZOOM

ACM maniac
Ну там точку с запятой не поставил, -1 зачем то в count засунул, значение в кавычках зачем то поместил, но в целом пойдет.
Ну а теперь представь, что массив $test - это твой массив $price.
Ты должен также пробежаться по нему и ... что сделать?
 

local1

Новичок
По решению задачки - насколько я знаю, count получает количество элементов в массиве, и нужно делать -1 в count, так как первый элемент в массиве начинается с 0.

А по своему вопросу... Ну скажем если сделать по типу той задачки так:

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) -1;    
    
for ($i = 0; $i <= $count; ++$i) {
         if ($price[$i] = $price_all[$i]) $result[] = $replace[$i];
}
Но это не правильно, так как, если к примеру в $price цифра 3 будет на 3 позиции, а в $price_all на 4, то совпадение не произойдет.
 

local1

Новичок
А можно поподробней? Я не вижу никаких вариантов использования in_array для поставленной задачи...
 

rotoZOOM

ACM maniac
Еще раз говорю. Ты сможешь описать словами алгоритм?
Примерно так: я взял элемент i из массива price_all ... ищу в другом массиве ... бла бла бла ...
Напиши словами, 1 итерацию.
 

craz

Нестандартное звание
А можно поподробней? Я не вижу никаких вариантов использования in_array для поставленной задачи...
для (и = 0; и < размера массива; и++) {
если (прайс[и] в_массиве весь_прайс) тогда делаем чето
}


P.s. Не я 1сников никогда не пойму наверное))))))
 
Сверху