我正在尝试查找下面的json数据替换。我试图将“消费者”替换为“CON”,将“工业”替换为“IND”,将“技术”替换为“TCH”。理想情况下,我想传递一个函数数组的查找(即{“Consumer”,“Industrial”,“Technology”})以及一系列替换(即{“CON”,“IND”,“TCH”) “}),或者其他一些快速定义多个查找和替换对的方法(将会有比这3个更多的对)。这样做的最佳功能是什么?谢谢,任何帮助表示赞赏。
[{"category":"Consumer","price":"18.9","number":"5"},{"category":"Industrial","price":"13.4","number":"4"},{"category":"Technology","price":"15.5","number":"3"}]
答案 0 :(得分:1)
这是一个解决方案,一个接一个地遍历json数据对象(仅检查键和值,并且只有在键/值完全位于$replaces
数组中时才替换
function replace(&$array, $replaces) {
foreach ($array as $k => $v) {
$new_k = replace_word($k, $replaces);
if (is_array($v)) {
replace($v, $replaces);
}
else {
$v = replace_word($v, $replaces);
}
$array[$new_k] = $v;
if ($new_k != $k) {
unset($array[$k]);
}
}
}
function replace_word($word, $replaces) {
if (array_key_exists($word, $replaces)) {
$word = str_replace($word, $replaces[$word], $word);
}
return $word;
}
/* TEST FUNCTIONS */
$json = '[{"category":"Consumer","price":"18.9","number":"5"},{"category":"Industrial","price":"13.4","number":"4"},{"category":"Technology","price":"15.5","number":"3"}]';
$replaces = array("category" => "cat", "Consumer" => "cons");
$json_data = json_decode($json, true);
var_dump($json_data);
replace($json_data, $replaces);
var_dump($json_data);
$json = json_encode($json_data);
答案 1 :(得分:0)
preg_replace
可以将模式和替换作为数组。
http://php.net/manual/en/function.preg-replace.php
所以,例如:
preg_replace(array('Consumer', 'Industrial', 'Technology'), array('CON', 'IND', 'TCH'), $json);
但请注意,除非您完全确定JSON,否则您可能会更好地解析JSON并替换实际的键/值。