如何在多维数组的foreach循环中使用preg_replace?

How to use preg_replace in foreach loop in multidimensional array?

我是 PHP 的初学者。

我的目的是用多维数组打印三个句子:

  1. 猫很臭

  2. 小鸟很美

  3. 蜗牛很粘

但我唯一能打印的句子是 "cats are smelly"。我试过很多东西。所以这是代码:

<?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>';

?>

我该如何解决?

关于您的解决方案不起作用的原因有多个层面。

  • 句子只回显一次
  • 句子正在被替换,所以一旦 "dogs" 被替换,它就不会替换任何其他内容,因为狗不再在句子中。
  • 脚本只循环遍历动物数组一次。
  • 任意项替换为任意项(您指定您希望猫是臭的,鸟是美丽的,蜗牛是粘的,这意味着将第一个数组的索引 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')。该脚本假定第一个和第二个数组的大小始终相等。

二级 foreach 循环中的 if 语句是为了确保一个数组中的正确元素与另一个数组中的正确元素相匹配。

希望对您有所帮助