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

问题描述 投票:0回答:1

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

?>

我怎样才能解决这个问题?

php multidimensional-array preg-replace
1个回答
0
投票

有多层,为什么你的解决方案不起作用。

  • 这句话只一次呼应
  • 句子被替换,所以一旦“狗”所取代,也不会因为狗是不是在句子取代了别的。
  • 该脚本通过动物数组循环一次。
  • 任何项目被替换任何物品(你指定你想猫臭,鸟类是美丽和蜗牛是粘,这意味着与第二数组的索引0,索引1索引1比第一数组的索引0等)。

我稍微改变了你的脚本,以确保它列表循环三次,每次呼应输出和句子被重置为它的默认值,以便可以再次改变。

$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循环是确保正确的元素从一个阵列与来自其他合适的元素相匹配。

我希望这有帮助

© www.soinside.com 2019 - 2024. All rights reserved.