Как использовать preg_replace в цикле foreach в многомерном массиве?

Я новичок в PHP.

Моя цель - напечатать три предложения с многомерным массивом:

  1. кошки вонючие

  2. птицы красивые

  3. улитки липкие

Но единственное предложение, которое я могу напечатать, это «кошки вонючие». Я пробовал много вещей. Итак, вот код:

<?php
$sentence = 'dogs are sweet';

$animals = array('@dogs@' => array('cats', 'birds', 'snails'),
                 '@sweet@' => array('smelly', 'beautiful', 'sticky'));

    foreach ($animals as $key => $value)
    {
        foreach ($value as $subkey => $subvalue)
        {
            $sentence = preg_replace($key, $subvalue, $sentence);
        }
    }
    echo $sentence . '</br>';

?>

Как я могу решить эту проблему?

После завершения первой замены предложение больше не содержит собаку или сладкое. Вам понадобится, возможно, массив предложений. $newSentences[] = preg_replace ....

Matthew Page 01.02.2019 20:10

поместите это во внутренний echo preg_replace($key, $subvalue, $sentence) ."<br>\n"; foreach

splash58 01.02.2019 20:11
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
2
205
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Есть несколько уровней того, почему ваше решение не работает.

  • Предложение повторяется только один раз
  • Предложение заменяется, поэтому после замены слова «собаки» оно больше ничего не заменит, потому что собак больше нет в предложении.
  • Скрипт перебирает массив животных только один раз.
  • Любой элемент заменяется на любой элемент (Вы указали, что хотите, чтобы кошки были вонючими, птицы были красивыми, а улитки были липкими, это означает, что нужно сравнить индекс 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 должен убедиться, что правильный элемент из одного массива соответствует правильному элементу из другого.

надеюсь, это поможет

Большое спасибо. Это не ответ, это урок. Так что это мне очень помогает и показывает весь мыслительный процесс, что, я думаю, самое важное. Я пытался использовать цикл for и count(), но это не сработало, потому что я написал это неправильно! Я почти уверен, что есть и другие способы получить тот же результат, но это тот, который мне нужен!

PhpDoe 02.02.2019 11:27

Другие вопросы по теме