函数

时间:2015-11-20 20:49:15

标签: php loops foreach

我正在尝试使用通过表单发送的值更新代码块但是我无法更新整个代码块。输入数量根据代码而变化。例如:

.btn-primary{
  color: @color;
  font-style: none;
  background-color: @background-color;
  transition: all .75s;
  text-transform: uppercase;
  font-weight: @font-weight;
   &:hover{
    background-color: darken(@background-color, 10%);
    font-style: none;
   color: @color; 
  }
}

我能够成功找到@个变量,并根据代码显示正确的<input>个数。我遇到的问题是我的foreach循环遍历每个$_POST值并更新代码。我能得到的最好结果是第一个$_POST值,但它会中断。

function replace_code($code){
 foreach($_POST as $name => $value){
  return str_replace($name, htmlentities($value), htmlentities($code));
 }
}

.btn-primary的情况下,当我填写输入并提交表单时,我能得到的最好的是第一个要更新的值,就是这样。如果我将#fff字段中的@color和其他值放入@background-color@font-weight并在设置提交后运行我的函数,则会得到输出。

.btn-primary{
 color: #fff;
 font-style: none;
 background-color: @background-color;
 transition: all .75s;
 text-transform: uppercase;
 font-weight: @font-weight;
  &:hover{
   background-color: darken(@background-color, 10%);
   font-style: none;
   color: #fff; 
  }
 }

关于如何让foreach循环继续更新代码的任何想法。

4 个答案:

答案 0 :(得分:2)

返回应该在foreach循环之后,因为它在循环内部将在第一个循环中退出函数

bind()

答案 1 :(得分:1)

您正在发出正在终止您的功能的return。您需要分别为该函数调用每个$_POST(效率低下),或者需要将数据解析为数据结构

function replace_code($code){
 $data = array();
 foreach($_POST as $name => $value){
  $data[$name] = str_replace($name, htmlentities($value), htmlentities($code));
 }
 return $data;

}

答案 2 :(得分:0)

你的PHP函数只替换第一个值,你必须循环它:

function replace_code($code){
    //best function
    $from = array();
    $to = array();
    foreach($_POST as $name => $value) {
        $from[] = $name;
        $to[] = htmlentities($value);
    }
    return str_replace($from, $to, $code);
}

function replace_code($code){
    foreach($_POST as $name => $value) {
        $code = str_replace($name, htmlentities($value), $code);
    }
    return $code;
}

如果需要,请使用htmlentities

答案 3 :(得分:0)

如果您想进行多次替换,可以提供新旧字符串的str_replace数组,不需要使用循环。

function replace_code($code) {
    $names = array_keys($_POST);
    $values = array_map('htmlentities', array_values($_POST));
    return str_replace($names, $values, $code);
}