【问题标题】:Conditional str_replace in a foreach loopforeach 循环中的条件 str_replace
【发布时间】:2015-12-04 11:35:02
【问题描述】:

不确定这是否是正确的方法,但这是我现在唯一想到的方法,所以欢迎新的建议!我正在尝试检测字符串所说的内容,并在此基础上将其替换为 foreach 中的自定义信息。

foreach($customfields as $field)
{
    if($field->title == 'Date of Birth')
    {
        $title = str_replace($field->title, 'Date of Birth', 'Data urodzenia');
    }
    else if($field->title == 'Address Line 1')
    {
        // str_replace doesn't work, as the above has already been done, replacing each $field->title.
    }
    // rest of code
}

然后我使用$title 在表格中显示它。 但是,问题在于,显然当检测到一个字符串时,它们都会被替换,因为每条记录都会被相同的字符串替换。我该如何克服/重新编码/重新处理它以使其工作?

【问题讨论】:

  • @zzwyb89- 在一个变量中取一个出生日期关键字..所以你不需要 ifelse 条件。仅将其与 $field->title 进行比较。

标签: php if-statement foreach


【解决方案1】:

根据str_replace

混合 str_replace ( 混合 $search , 混合 $replace , 混合 $subject [, int &$count ] )

前两个参数可以是数组,所以你可以像这样使用它:

$searches = array('Date of Birth', 'Address Line 1');
$replacements = array('Data urodzenia', 'Another address replacement');

$customFields = array_map(function($field) use ($searches, $replacements) {
    $field->title = str_replace($searches, $replacements, $field->title);
    return $field;
}, $customFields);

另外,你给参数的顺序是错误的,调用函数时要替换的字符串是第三个。

对于低于 5.3 的 PHP 版本,不支持闭包,因此您可以在 foreach 循环中进行替换:

$searches = array('Date of Birth', 'Address Line 1');
$replacements = array('Data urodzenia', 'Another address replacement');

foreach($customfields as $field) {
    $field->title = str_replace($searches, $replacements, $field->title);
}

【讨论】:

  • 这个可以在foreach里面使用吗?如果我想要两个以上的数组怎么办?
  • 你不再需要foreach了..只有当你对字段做其他事情时..但是你可以在我提供的代码之后使用foreach
  • 我在foreach中做了很多事情,比如生成表单字段,并设置它们的类。将您的代码放在 foreach 之前会给我Parse error: syntax error, unexpected T_FUNCTION, expecting ')'。第 47 行是array_map(function....
  • more than 2 arrays 是什么意思?您可以添加您希望的搜索和替换次数。虽然我建议您实施本地化系统,因为我想您正在尝试本地化网站
  • 您使用什么版本的 PHP? PHP 5.3.0 中添加了闭包(匿名函数)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-15
  • 1970-01-01
  • 2010-11-16
  • 1970-01-01
  • 2021-01-27
相关资源
最近更新 更多