Php 使用MySQL选择查询(Wordpress)重新格式化MySQL数据库表中的JSON数组
我有一个Wordpress构建,它使用火山口表单。不幸的是,插件的作者决定将所有复选框条目存储为WP数据库中的JSON数组,自定义字段值显示为数组,而不是实际的文本值 我想运行一个cron作业来重新格式化这些条目,但第一部分是试图找出如何查找和替换所有JSON对象的值 我编写了一个函数,用于从数据库中的特定表中获取值,特别是wp\u cf\u form\u entry\u values表。此函数在SELECT查询中使用正则表达式查找以{字符。这是我在值字段中查找JSON对象的方法,但可能有更好的方法。无论如何,函数获取这些值,并将它们从JSON对象重新格式化为单个项的列表,即在提交表单中检查的各种值 以下是我目前的职能:Php 使用MySQL选择查询(Wordpress)重新格式化MySQL数据库表中的JSON数组,php,mysql,json,database,wordpress,Php,Mysql,Json,Database,Wordpress,我有一个Wordpress构建,它使用火山口表单。不幸的是,插件的作者决定将所有复选框条目存储为WP数据库中的JSON数组,自定义字段值显示为数组,而不是实际的文本值 我想运行一个cron作业来重新格式化这些条目,但第一部分是试图找出如何查找和替换所有JSON对象的值 我编写了一个函数,用于从数据库中的特定表中获取值,特别是wp\u cf\u form\u entry\u values表。此函数在SELECT查询中使用正则表达式查找以{字符。这是我在值字段中查找JSON对象的方法,但可能有更好的
function reformat_my_data() {
global $wpdb;
$data = $wpdb->get_results("SELECT value
FROM `wp_cf_form_entry_values`
WHERE `value` REGEXP '^[{].*$'
");
foreach($data as $key => $field) {
foreach($field as $val) {
if( is_json($val) ) {
$val = json_decode($val, true);
foreach($val as $checked) {
echo ' - ' . $checked . '<br/>';
}
}
}
}
}
reformat_my_data();
我还有另一个函数来确定该值是否为JSON对象:
函数为_json$string{
json_解码$string;
返回json\u last\u error==json\u error\u NONE;
}
这将工作并输出如下列表:
-检查1
-检查2
-检查3
我的问题是:如何将这个新格式化的值返回到数据库中?换句话说,如何在WP数据库中大量替换JSON类型的对象?使用INSERT?或者您的问题有什么特别之处,不使用普通SQL语句?或者类似的东西。@Andy,谢谢您的评论。问题是我必须检查该值是否为JSON对象。这决定了我是否会对该值进行任何更改。问题是,我创建的表单上有20多个复选框问题,可能会有无休止的变化。因此,我无法通过value1、value2等进行检查。我需要检查该值是否为JSON对象。如果是,则我将需要重新格式化并替换它。我想我没有弄好…你不可以在if语句中添加一个insert并插入格式化的值吗?你可以使用$KEY作为索引。需要澄清的是:多个复选框可以有多个变体。即answer1、answer2或answer2、answer3、answer5或answer1、answer6、answer9等当前以JSON格式存储。即{answer2,answer3,answer5}。我想将此JSON格式替换为:answer2answer3answer5