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

时间:2019-02-01 19:06:59

标签: php multidimensional-array preg-replace

我是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>';

?>

我该如何解决?

1 个答案:

答案 0 :(得分:0)

关于您的解决方案无法正常工作的原因,有很多层次。

  • 句子只回音一次
  • 句子已被替换,因此一旦替换了“狗”,它将不再替换其他任何内容,因为狗不再在句子中。
  • 该脚本仅在动物数组中循环一次。
  • 任何项目都将替换为任何项目(您指定要让猫发臭,使鸟变美,使蜗牛变粘,这意味着将第一个数组的索引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语句是确保一个数组中的正确元素与另一个数组中的正确元素匹配。

我希望这对您有帮助