Попытка добавить массив в связанный массив

#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($результат);