我正忙于尝试从WP数据库中的序列化字符串中提取特定数据。原始字符串如下所示:
{"params":{"1":{"key":"1","enabled":"1","value":"Yes"},"2":{"key":"2","enabled":"1","value":"No"}}}
我能够(显然)使用以下代码检索此字符串:
$results = $wpdb->get_var("SELECT options FROM wp_wpl_dbst WHERE table_column = '{$id}'");
$parseme = unserialize($results);
但是,我实际上无法从我刚刚创建的数组中提取任何值。
我尝试了以下代码的一些变体,所有这些都导致相同的错误:
foreach ($parseme as $parsed) {
$return_string .= $parsed['key'] . '<br>';
$return_string .= $parsed['value'] . '<br>';
}
错误是:
警告:第236行的/usr/www/users/.../functions.php中为foreach()提供的参数无效
任何输入将不胜感激。
答案 0 :(得分:1)
您显示的原始字符串不是序列化的字符串。序列化的字符串中包含密钥长度,如下所示:a:2:{i:0;s:4:"test";i:1;a:2:{i:0;s:4:"test";i:1;R:3;}}
。您正在检索的实际上是JSON
。
因此,您应该可以将unserialize($results)
替换为json_decode( $results, true )
,然后才能访问关联数组。请注意,您还有一个带有params
键的外部数组。以下面的代码为例
$results = '{"params":{"1":{"key":"1","enabled":"1","value":"Yes"},"2":{"key":"2","enabled":"1","value":"No"}}}';
$results_array = json_decode( $results, true );
$return = '';
foreach( $results_array['params'] as $array ){
$return .= $array['key'].'<br>';
$return .= $array['value'].'<br>';
}
这将输出以下内容:
string(23) "1
Yes
2
No
"
答案 1 :(得分:0)
字符串为JSON
{"params":{"1":{"key":"1","enabled":"1","value":"Yes"},"2":{"key":"2","enabled":"1","value":"No"}}}
我们可以使用json_decode覆盖对象,尝试一下
$results = $wpdb->get_var("SELECT options FROM wp_wpl_dbst WHERE table_column = '{$id}'");
$parseme = json_decode($results);