PHP str_replace替换两个单词

时间:2017-10-28 09:42:12

标签: php str-replace

我的代码在下面..

echo $type = str_replace(array('q','h','f'),array('Quarter','Half','Full'),$_POST['type']);

这里上面的行$ _POST ['type']有这3个值;

  1. $ _ POST type ='q'
  2. $ _ POST type ='h'
  3. $ _ POST type ='f'
  4. 我想替换

    • q with Quarter
    • h with Half
    • f with Full。

    我的问题是$ _POST ['type'] ='h',

    上述代码的结果意味着$ type的值来自 HalFull

    为什么会这样......

    有没有解决方案......?

    由于

3 个答案:

答案 0 :(得分:1)

问题

对于三个参数中的每一个,都会连续执行

# Create feature column and estimator column = tf.feature_column.numeric_column('x') lin_reg = tf.estimator.LinearRegressor(feature_columns=[column]) # Train the estimator train_input = tf.estimator.inputs.numpy_input_fn( x={"x": np.array([1.0, 2.0, 3.0, 4.0, 5.0])}, y=np.array([2.0, 4.0, 6.0, 8.0, 10.0]), shuffle=False,num_epochs=2500,batch_size=1) ###Edited here lin_reg.train(train_input) # Make two predictions predict_input = tf.estimator.inputs.numpy_input_fn( x={"x": np.array([1.9, 1.4], dtype=np.float32)}, num_epochs=1, shuffle=False) results = lin_reg.predict(predict_input) # Print result for value in results: print(value['predictions'])

对于第一个参数,没有任何内容被替换。

对于第二个参数,str_replace替换为h

对于第二个参数,Half的{​​{1}}被f取代。

所以你最终得到Half

解决方案

有很多方法可以解决这个问题。

最简单的解决方案是改为使用preg_replace,并优化搜索条件:

Full

答案 1 :(得分:1)

似乎正在用h取代Half,然后用f取代Half Full

如果你能提供一个仅在源字符串恰好是一个字符时替换的正则表达式,那么可能会有效。

试试这个:

echo $type = preg_replace(array('/^q$/i','/^h$/i','/^f$/i'),array('Quarter','Half','Full'),$_POST['type']);

它有效

答案 2 :(得分:1)

如果您更改替换顺序,那么您可以:

echo $type = str_replace(array('q','f','h'),array('Quarter','Full','Half'),$_POST['type']);

..因为' f'产生' Full'和' Full'没有任何内容,所以下次更换是安全的。

或者您可以选择一种完全不同的方法,这种方法更安全,我敢说更具可读性和可维护性。

$translate = array(
  'q' => 'Quarter',
  'h' => 'Half',
  'f' => 'Full'
);

echo $type = $translate[$_POST['type']];