我正在尝试将一组值保存到WordPress。
这是我正在运行以保存它的代码:
$array= new stdClass();
$array->step1 = boolval(true);
$array->step2 = boolval(false);
$array->step3 = boolval(false);
$array->step4 = boolval(false);
$array->step5 = boolval(false);
$array->step6 = boolval(false);
$array->step7 = boolval(false);
$array->step8 = boolval(false);
$array->step9 = boolval(false);
update_post_meta( $order_id, '__status', $array);
当我尝试print_r($array)
时,结果如下:
O:8:"stdClass":9:{s:5:"step1";b:1;s:5:"step2";b:0;s:5:"step3";b:0;s:5:"step4";b:0;s:5:"step5";b:0;s:5:"step6";b:0;s:5:"step7";b:0;s:5:"step8";b:0;s:5:"step9";b:0;}
我只想像这样添加数组:
$array = [
"step1": True,
"step2": false
...
]
因此echo $array["step1"]
的结果为true
,但这不起作用。
如何将数据正确存储在数据库中?为什么如上所述存储?或者如何正确使用并从上面保存的格式中获取要在模板中使用的值?我尝试过:
print_r($meta["__status"][0]['step1']['b'];
这是对的吗?这段代码有什么问题?
修改
感谢所有的建议,我改变了这种方式:
$array= [];
$array["step1"] = true;
$array["step2"] = false;
$array["step3"] = false;
$array["step4"] = false;
$array["step5"] = false;
$array["step6"] = false;
$array["step7"] = false;
$array["step8"] = false;
$array["step9"] = false;
然后
$meta = get_post_meta($order->id);
$meta = unserialize($meta["__status"][0]);
echo $meta['step1'] ? 'true': 'false';
echo $meta['step2'] ? 'true': 'false';
其中打印出1表示真实
答案 0 :(得分:1)
$array = [
'step1' => true,
'step2' => false,
'step3' => false,
'step4' => false,
'step5' => false,
'step6' => false,
'step7' => false,
'step8' => false,
'step9' => false
];
如评论中所述 - 您正在创建stdClass的ab对象,但不是数组。 数据库中保存元的字段是一个字符串(简单文本行)。 如何在文本行中保存对象或数组,这些对象或数组具有非文本值的多个字段(布尔值为true | false)?
这就是为什么你会看到这样的数据。
数据已序列化。
查看serialize()和unserialize()函数。
他们正在将对象或数组转换为文本表示,以将其保存到数据库中的文本字段。
当您收到数据时,您需要对其进行反序列化,然后您将获取已保存的对象或数组
答案 1 :(得分:1)
Essentialy创建数组:
$array= [];
$array["step1"] = true;
$array["step2"] = false;
$array["step3"] = false;
$array["step4"] = false;
$array["step5"] = false;
$array["step6"] = false;
$array["step7"] = false;
$array["step8"] = false;
$array["step9"] = false;
如果你不从不同的类型转换它们,那么boolval是不必要的