满足条件时将$ content分成数组

时间:2020-07-30 15:16:18

标签: php arrays string parsing symfony4

我有一个类别名称为$categories_array的数组。
我有一个$content变量,其中包含一个大字符串(产品说明)

我的意图是将$content爆炸成一个数组($content_array)。
很简单。
内容中还包含类别名称 问题如下:

  • 类别被命名为Kids and Baby

我无法按字爆炸,因为我想将内容kids and baby保留在同一数组条目中。
我也无法一直查询,因为这会占用大量资源。

实现这样的最佳方法是什么?

这是原始的$ content:

$content = "lorem ipsum bla bla bla cat1 bla bla bla kids and baby";

这是我的类别数组:

$categories_array = array(
    "cat1",
    "kids and baby",
    "cat3",
    ...
);

这是我的预期输出:

$content_array = array(
    "word1",
    "word2",
    "kids and baby",
    "word3"
);

感谢您的指导。

1 个答案:

答案 0 :(得分:2)

对于每个类别,搜索该类别的内容,并用内容中不存在的字符替换空格。

然后用空格爆炸内容(因此它将类别文本保持在一起)。

稍后,只需将该字符替换回空格即可。

<?php

$content = "lorem ipsum bla bla bla cat1 bla bla bla kids and baby";

$categories_array = array(
    "cat1",
    "kids and baby",
    "cat3",
);  

foreach($categories_array as $category) {
  $content = str_replace($category, str_replace(' ', '·', $category), $content);
}

$content_array = explode(' ', $content);

$content_array = array_map(function ($content) {return str_replace('·', ' ', $content);}, $content_array);

var_dump($content_array);

输出:

array(10) {
  [0]=>
  string(5) "lorem"
  [1]=>
  string(5) "ipsum"
  [2]=>
  string(3) "bla"
  [3]=>
  string(3) "bla"
  [4]=>
  string(3) "bla"
  [5]=>
  string(4) "cat1"
  [6]=>
  string(3) "bla"
  [7]=>
  string(3) "bla"
  [8]=>
  string(3) "bla"
  [9]=>
  string(13) "kids and baby"
}