【问题标题】:Search Specific words in php array在 php 数组中搜索特定单词
【发布时间】:2019-12-29 16:48:13
【问题描述】:

我有一个这样的数组

$array = [
    'item1' => 'red', 
    'item2' => 'blue#foo#',
    'item3' => 'green',
    'item4' => 'white#foo2#',
    'item5' => 'bla#foo3#ck',
    'item6' => 'yellow#foo#'];

我不想得到所有被#word#包围的单词(word可以是anything

$list = array_unique([ "#foo#", "#foo2#", "#foo3#", #foo#" ]);

并用我的数据替换 $array 中的 $list

$data = ['John', 'California', 'Cola', .......];

最后去吧

$array = [
    'item1' => 'red', 
    'item2' => 'blueJohn',
    'item3' => 'green',
    'item4' => 'whiteCalifornia',
    'item5' => 'blaColack',
    'item6' => 'yellowJohn'];

如果有人可以给我建议。

编辑到@mickmackusa 谢谢你的链接,但是我怎么能得到我的 $list 呢? 这并不是真正的效率,因为如果我的初始数组有很多行,则循环可能需要一些时间,但是谢谢。

这是使用循环执行此操作的唯一方法吗?

提前致谢。

【问题讨论】:

  • 这不是很清楚你想用什么替换这些词。发布你想要的这个数组的结果
  • 我编辑了我的出版物,希望问题得到很好的解释,如果有人有比循环更好的想法,我总是在倾听

标签: php pattern-matching


【解决方案1】:

不,您不必必须使用循环来执行替换,但是无论您使用什么语法,php 都会“迭代”数组。

Regex 提供了更简洁的代码,但如果您想要更好的性能,循环内的strtr() 很可能会执行得更快。

我将在我的 sn-ps 中将您的输入数据声明为 $array。以下两个示例都将提供此输出:

array (
  'item1' => 'red',
  'item2' => 'blueJohn',
  'item3' => 'green',
  'item4' => 'whiteCalifornia',
  'item5' => 'blaColack',
  'item6' => 'yellowJohn',
)

循环strtr(): (Demo)

$translations = [
    '#foo#'  => 'John',
    '#foo2#' => 'California',
    '#foo3#' => 'Cola',
];

foreach ($array as &$item) {  // modify values by reference with & symbol
    $item = strtr($item, $translations);  // translate placeholder to desired substring from lookup array
}

var_export($array);

preg_replace(): (Demo) *通知模式分隔符被添加到查找数组中

$translations = [
    '~#foo#~'  => 'John',
    '~#foo2#~' => 'California',
    '~#foo3#~' => 'Cola',
];

var_export(preg_replace(array_keys($translations), $translations, $array));

附言如果您不知道如何生成您的$list,那么我无法理解您将如何知道如何将特定占位符转换为适当的值。我假设您有足够的项目逻辑知识来编写适当的翻译/查找数组。

【讨论】:

  • 谢谢,对于 $list,我可能使用正则表达式来查找 #words# 并构建翻译,它可以是任何东西,因为初始数组取决于项目的哪个部分调用该方法并且我想要全球化全部。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-04
  • 2015-05-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多