Существует несколько уровней того, почему ваше решение не работает.
- Предложение повторяется только один раз
- Предложение заменяется, поэтому после замены "собаки", он больше ничего не заменит, потому что собак больше нет в предложении.
- Скрипт перебирает массив животных только один раз.
- Любой предмет заменяется любым предметом (Вы указалиВы хотите, чтобы кошки были вонючими, птицы были красивыми, а улитки липкими, это значит сравнивать индекс 0 первого массива с индексом 0 второго массива, индекс 1 с индексом 1 и т. д.).
Я немного изменил ваш сценарий, чтобы он трижды проходил по списку, поскольку каждый раз, когда он выводит выходные данные, и предложение сбрасывается до значения по умолчанию, поэтому его можно изменить снова.
$animals = array('@dogs@' => array('cats', 'birds', 'snails'),
'@sweet@' => array('smelly', 'beautiful', 'sticky'));
for ($i = 0; $i < count(reset($animals)); $i++) {
$sentence = 'dogs are sweet';
foreach ($animals as $key => $value)
{
foreach ($value as $subkey => $subvalue)
{
if ($subkey === $i) {
$sentence = preg_replace($key, $subvalue, $sentence);
}
}
}
echo $sentence . "<br />";
}
Часть count(reset($animals))
считает значение первого элемента массива $animals
.Так что в этом случае array('cats', 'birds', 'snails')
.В сценарии предполагается, что первый и второй массивы всегда равны по размеру.
Оператор if во вторичном цикле foreach предназначен для проверки соответствия правого элемента из одного массива правому элементу из другого.
Надеюсь, это поможет