从序列化字符串中筛选结果以用于统计信息

时间:2017-07-13 作者:Marcelo Henriques Cortez

我需要从序列化字符串中获取值,以便在某些统计信息中使用它。我已经在其他页面中获得了这些信息来显示一些内容,但我不知道为什么我现在有这个问题。

DB有一个名为wj_db7_forms (我正在使用WordPress插件将输入记录到表单上)。

我需要的信息栏在form_value.

清洗柱的内容时,有一部分带有s:4:"city";s:6:"boston".

我想得到所有的表单,在每一个表单上,都要得到city. 该值可以有任何长度,因为它是一个开放输入。

我尝试了很多方法,但都没有成功。

我会犯这样的错误

分析错误:语法错误,意外的“city”(T\\u字符串)

或者根本不获取错误,但变量似乎为空,等等。

我试过了unserialize, array_pop, print_r, echo, 每件事

<?php
global $wpdb;
$table_name = $wpdb->prefix.\'db7_forms\';
$results    = $wpdb->get_results( "SELECT form_value FROM $table_name WHERE form_post_id = 6062", OBJECT );
$form_data  = unserialize( $results[0]->form_value );
print_r($form_data);
?>
使用该代码,我可以从表单中获取所有信息,但我可以获取所有信息,包括来自其他列的信息。。。而且只有一种形式。我需要从“wj\\u db7\\u forms”表中所有具有“form\\u post\\u id”的表单中获取。

其中一个表单的“form\\u value”中的内容如下:https://pastebin.com/e6LzJzLS

$form\\u数据[“city”]现在可以使用了。但我需要得到所有形式的值。它只为我返回一个。

1 个回复
最合适的回答,由SO网友:kero 整理而成

因此,表单基本上会在数据库中保存一个大型序列化数组。现在,由于您有多个表单,因此需要迭代get_results, unserialize 列,然后访问city 钥匙

global $wpdb;
$table_name = $wpdb->prefix.\'db7_forms\';
$results = $wpdb->get_results( "SELECT form_value FROM $table_name WHERE form_post_id = 6062", OBJECT );
// iterate over results
foreach ($results as $result) {
    $data = unserialize($result->form_value);
    // now the city is in $data[\'city\']
}

结束