如何正确设置和获取后元数组

时间:2017-08-03 08:50:52

标签: php arrays wordpress

我正在尝试将一组值保存到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表示真实

2 个答案:

答案 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是不必要的