#php #database #wordpress #associative-array
Вопрос:
У меня есть связанный массив, сохраненный в моей базе данных, который я сохраняю в переменную, называемую response_cost
функцией WordPress get_post_meta
.
$response_cost = get_post_meta( $postID, $metaKey, true );
Массив выглядит примерно так:
a:2: {
i:0;a:3:
{s:4:"type";s:6:"months";s:4:"cost";s:0:"";s:8:"modifier";s:1:"=";}
i:1;a:3:
{s:4:"type";s:5:"weeks";s:4:"cost";s:0:"";s:8:"modifier";s:1:" ";}
}
У меня есть созданная мной форма, которая выводит новый массив и сохраняется в вызванной переменной $add_to_response_cost
.
$add_to_response_cost = array (
'type' => $type,
'cost' => $cost,
'modifyer' => $modifyer
);
Я не могу понять, как добавить $add_to_response_cost
в качестве еще одного экземпляра $response_cost
, чтобы выход заканчивался так:
a:3: {
i:0;a:3:
{s:4:"type";s:6:"months";s:4:"cost";s:0:"";s:8:"modifier";s:1:"=";}
i:1;a:3:
{s:4:"type";s:5:"weeks";s:4:"cost";s:0:"";s:8:"modifier";s:1:" ";}
i:2;a:3:
{ my new array I've constructed via $add_to_response_cost }
}
Любая помощь или указания в этом вопросе будут высоко оценены.
Ответ №1:
Чтобы понять проблему, сначала нам нужно немного объяснить, как работает сохранение массивов в пользовательских полях
Здесь у нас есть массив
$array = array(
"0" => array(
"type" => "months",
"cost" => null,
"modifier" => "=",
),
"1" => array(
"type" => "weeks",
"cost" => null,
"modifier" => " ",
)
);
Если мы решим сохранить его как пользовательское поле в базе данных, мы используем функцию update_post_meta()
update_post_meta( 1, 'response_cost', $array );
Прежде чем сохранить его в базе данных, WordPress сериализует наш массив, а затем помещает его в базу данных.
В результате массив будет сохранен в базе данных в следующем формате
a:2:{i:0;a:3:{s:4:»type»;s:6:»months»;s:4:»cost»;N;s:8:»modifier»;s:1:»=»;}i:1;a:3:{s:4:»type»;s:5:»weeks»;s:4:»cost»;N;s:8:»modifier»;s:1:» «;}}
Затем, если мы хотим получить массив, мы используем get_post_meta()
$myarray = get_post_meta(1, "response_cost", true);
WordPress возьмет сериализованный массив из базы данных и преобразует его в обычный массив.
Затем мы можем добавить любые данные, которые мы хотим, в массив и сохранить их обратно в базу данных.
$add_to_response_cost = array (
'type' => $type,
'cost' => $cost,
'modifyer' => $modifyer
);
$myarray[] = $add_to_response_cost;
update_post_meta( 1, 'response_cost', $myarray );
Обычно эта проблема возникает при использовании функции get_post_meta без указания ключа, только с одним параметром (ID), затем мы получаем массивы без обработки, и они сначала должны быть несериализованы
Это также может произойти, когда вы получаете массив из базы данных не с помощью функции WordPress, а с помощью прямого SQL-запроса к базе данных. Затем вам нужно сначала отменить сериализацию массива, добавить в него данные и упаковать их обратно.
Ответ №2:
Вы можете попробовать несериализовать (), чтобы преобразовать его в массив.
$результат = несериализация($response_cost);
Print_r($результат);