这更像是一个澄清而不是一个问题,我在这里有这个代码:
$itemSizeArray = array('S' => 'Small', 'M' => 'Medium', 'L' => 'Large', 'X' => 'XLarge');
$modifierSize = 'X';
$submenuModifierDescription['SUME_DESCRIPTION'] = "Small Toppings";
echo str_replace($itemSizeArray, $itemSizeArray[$modifierSize], $submenuModifierDescription['SUME_DESCRIPTION']);
在所有情况下都可以正常工作除时$modifierSize = 'X';
,
它输出"XXLarge Toppings"
(双X)。 - 问题
在其他情况下,即当$modifierSize = 'L';
输出Large Toppings
时。 - 没问题
在我阅读文档之后,我用这行
修复了代码echo str_replace($itemSizeArray['S'], $itemSizeArray[$modifierSize], $submenuModifierDescription['SUME_DESCRIPTION']);
它工作正常,但我不明白为什么。
[this] 导致此行为的第一位代码的过程是什么? [/ this]
修改:我以粗体显示[this],其他用户的强制编辑删除了粗体。我将斯坦尼斯拉夫的答案标记为正确的答案,因为他正在回答实际的问题,而不是基于问题的信息他认为我问的问题。谢谢大家的时间
答案 0 :(得分:1)
您到底想要替换的内容以及目标字符串中的内容是什么?它显示奇怪行为的原因可能是因为str_replace可以期望第一个(搜索)和第二个(替换为)参数的值数组。在原始代码示例中,您提供了键值对作为针(第一个参数)。
例如,如果您要搜索S,M,L等并将其替换为Small,Medium,Large等,您可以尝试以下操作:
str_replace(array_keys($itemSizeArray), array_values($itemSizeArray), $subject);
答案 1 :(得分:1)
Docs说:
如果search是一个数组而replace是一个字符串,那么这个替换 string用于搜索的每个值。
所以" Small Toppings"成为" XLarge Toppings"然后,在字符串" XLarge Toppings"大变成XLarge,结果是" XXLarge Toppings"。
以下是了解正在发生的事情的小例子:
$itemSizeArray = array('Small', 'Large');
var_dump(str_replace($itemSizeArray, 'XLarge', "Small Toppings"));exit;
答案 2 :(得分:0)
我认为实现这一目标的正确方法是
$itemSizeArray = array('S' => 'Small', 'M' => 'Medium', 'L' => 'Large', 'X' => 'XLarge');
$modifierSize = 'X';
$submenuModifierDescription['SUME_DESCRIPTION'] = "Small Toppings";
echo str_replace($submenuModifierDescription['SUME_DESCRIPTION'], $itemSizeArray[$modifierSize], $submenuModifierDescription['SUME_DESCRIPTION']);
但仍然为什么会让事情复杂化。您可以在每次需要时更改菜单变量的值
$submenuModifierDescription['SUME_DESCRIPTION'] = $itemSizeArray[$modifierSize];
您的代码在X情况下返回奇怪的结果,因为str_replace函数第一个参数是一个数组。
答案 3 :(得分:0)
itemSizeArray是一个数组,而str_replace正在替换STRING。 如果要替换数组中的所有值,则应该执行foreach循环:
foreach($ itemSizeArray as $ key => $ var)并替换你想要的东西
但正如我所看到的,如果你输入“X”,那么你试图得到“XLarge toppings”,如果你有“L”,那么就是“大型浇头”等等。
在这种情况下,这可能是代码:
$itemSizeArray = array('S' => 'Small', 'M' => 'Medium', 'L' => 'Large', 'X' => 'XLarge');
$modifierSize = 'X';
echo ($itemSizeArray[$modifierSize].' Toppings');
这是因为itemsizearray已经是一个关联数组,所以你可以按键来解决这些元素。